【記憶優化搜尋/dp】HDU - 6415 - 杭電多校第九場 - Rikka with Nash Equilibrium
題目連結<http://acm.hdu.edu.cn/showproblem.php?pid=6415>
題意:
在一個矩陣中,如果某一個數字是該行該列的最大值,則這個數滿足納什均衡。
要求構造一個n*m的矩陣,裡面填的數字各不相同且範圍是【1,m*n】,問有多少種構造方案。
The first line contains a single integer t(1≤t≤20), the number of the testcases.
The first line of each testcase contains three numbers n,m and K(1≤n,m≤80,1≤K≤109).
The input guarantees that there are at most 3 testcases with max(n,m)>50.
題解:
從大到小一個個放數字進去,每放進去一個數字,它的這一行這一列就被佔領(這一行這一列就可以放數字了)。可以發現每放進去一個數字會有三種狀態:
1、多佔領一行;
2、多佔領一列;
3、沒有多佔領。即處在原先佔領行列的交叉口。
然後就可以記憶優化搜尋了,只要寫的不難看是可以剛好卡過的。如果寫成dp的話會更快。
注意記憶優化的陣列初始值不能賦值為零,因為答案也有可能是零。
有一個沒什麼用的優化,如果所有的地方都已經佔領了,那麼剩下的可能數就是一個階乘。不會變快很多,因為剩下的數字相對來說會很小。
搜尋TLE可以多交幾發。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod,n,m;
ll dp[85][85][85*85];
ll dfs(ll x,ll y,ll z){//佔領了x行,y列。已經放進去了z個數字
if(dp[x][y][z]!=-1) return dp[x][y][z];
ll tmp=0;
if(x<n) tmp=(tmp+y*(n-x)%mod*dfs(x+1,y,z+1))%mod;
if(y<m) tmp=(tmp+x*(m-y)%mod*dfs(x,y+1,z+1))%mod;
if(x*y>z) tmp=(tmp+(x*y-z)%mod*dfs(x,y,z+1))%mod;
return dp[x][y][z]=tmp;
}
int main()
{
ll t;
scanf("%lld",&t);
while(t--){
memset(dp,-1,sizeof(dp));
scanf("%lld%lld%lld",&n,&m,&mod);
dp[n][m][n*m]=1;
ll ans=m*n%mod*dfs(1,1,1)%mod;
printf("%lld\n",ans);
}
}
dp還是很穩的。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod,n,m;
ll dp[85*85][85][85];
int main()
{
ll t;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&mod);
dp[n*m][n][m]=1;
for(ll i=n*m-1;i>=1;i--){
for(ll j=n;j>=1;j--){
for(ll k=m;k>=1;k--){
if(j*k<i) break;
dp[i][j][k]=k*(n-j)%mod*dp[i+1][j+1][k]%mod;
dp[i][j][k]=(dp[i][j][k]+j*(m-k)%mod*dp[i+1][j][k+1]%mod)%mod;
dp[i][j][k]=(dp[i][j][k]+(j*k-i)%mod*dp[i+1][j][k]%mod)%mod;
}
}
}
printf("%lld\n",n*m%mod*dp[1][1][1]%mod);
}
}
相關文章
- HDU 6415 Rikka with Nash Equilibrium (DP)UI
- HDU6415:Rikka with Nash Equilibrium(dp)UI
- hdu 6415 Rikka with Nash EquilibriumUI
- [DP]HDU6415(2018多校訓練賽第九場 Problem A) Rikka with Nash Equilibrium 題解UI
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- 【dp+組合數學】hdu 2018 多校第九場 1001 Rikka with Nash Equilibrium hdu 6415UI
- 2024杭電多校第九場
- 2018 Multi-University Training Contest 9----hdu 6415 Rikka with Nash EquilibriumAIUI
- 2024杭電多校第8場
- 2024杭電多校第9場
- 杭電多校補題
- 記憶化搜尋
- HDU5831(2016多校第八場)———Rikka with Parenthesis II(水題)
- C - Digital Path 計蒜客 - 42397(dp記憶化搜尋)Git
- Codeforces 148D Bag of mice:概率dp 記憶化搜尋
- C++記憶化搜尋C++
- HDU4965Fast Matrix Calculation(2014多校第九場)AST
- 一類適合記憶化搜尋的區間dp
- poj1179 區間dp(記憶化搜尋寫法)有巨坑!
- 2024杭電多校覆盤 (1~5)
- 搜尋引擎優化(SEO)優化
- Codeforces 900D Unusual Sequences:記憶化搜尋
- hdu 3507 斜率優化DP入門題優化
- 【DFS】HDU 5423 Rikka with Tree
- 二叉搜尋樹 [四邊形不等式優化區間dp]優化
- solr搜尋分詞優化Solr分詞優化
- 微信全文搜尋優化之路優化
- 搜尋結果頁優化優化
- POJ 1579-Function Run Fun(記憶化搜尋-遞迴)Function遞迴
- 【leetcode 1510 石子游戲】【記憶化搜尋】LeetCode
- 杭電ACM hdu 2110 Crisis of HDU 解題報告(母函式)ACM函式
- HDU 4620 Fruit Ninja Extreme(搜尋)UIREM
- Codeforces Round #390 (Div. 2)(A,B,C(記憶化搜尋),D(貪心,優先佇列))佇列
- codeforces 505C. Mr. Kitayuta, the Treasure Hunter (記憶化搜尋)
- 杭電ACM hdu 1171 Big Event in HDU 解題報告(母函式)ACM函式
- 機票垂直搜尋引擎之效能優化優化
- 搜尋引擎優化內容及方法優化
- 任意列搜尋之列儲存優化優化