【記憶優化搜尋/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
- 【dp+組合數學】hdu 2018 多校第九場 1001 Rikka with Nash Equilibrium hdu 6415UI
- hdu 6415 Rikka with Nash EquilibriumUI
- [DP]HDU6415(2018多校訓練賽第九場 Problem A) Rikka with Nash Equilibrium 題解UI
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- HDU 6415(dp/記憶化搜尋)
- 2018 Multi-University Training Contest 9----hdu 6415 Rikka with Nash EquilibriumAIUI
- HDU多校第九次 6415 (dp
- HDU 6415(dp/找規律-2018多校第九場1001)
- 2024杭電多校第九場
- hdu 6415 - DP
- 杭電多校第10場 6887 Task Scheduler(DP)
- HDU6415(DP)
- HDU 6415 (計數dp)
- 2024杭電多校第8場
- 2024杭電多校第9場
- 記憶化搜尋
- 一類適合記憶化搜尋的區間dp
- C - Digital Path 計蒜客 - 42397(dp記憶化搜尋)Git
- HDU 6311 - Cover [2018杭電多校聯賽第二場 C](尤拉通路/迴路)
- 杭電多校補題
- C++記憶化搜尋C++
- 杭電hdu2072
- 2024杭電多校覆盤 (1~5)
- 【leetcode 1510 石子游戲】【記憶化搜尋】LeetCode
- 杭電HDU2018 奶牛的故事
- 搜尋引擎優化(SEO)優化
- 記憶搜尋解救滑雪問題
- HDU 4620 Fruit Ninja Extreme(搜尋)UIREM
- HDU1560,迭代加深搜尋
- hdu 1175 連連看 搜尋
- 2020hdu多校8
- 二叉搜尋樹 [四邊形不等式優化區間dp]優化
- solr搜尋分詞優化Solr分詞優化
- 2020HDU多校第三場 1005 Little W and Contest
- hdu 2111 Saving HDU (DP)
- hdu 1728 逃離迷宮 搜尋