[DP]HDU6415(2018多校訓練賽第九場 Problem A) Rikka with Nash Equilibrium 題解
題目大意
給出一個 n∗m n ∗ m <script type="math/tex" id="MathJax-Element-3">n*m</script>的網格,現要在網格中填入1,2,……, n∗m n ∗ m <script type="math/tex" id="MathJax-Element-4">n*m</script>,如果一個格子數比同行同列的數都大,那麼就說這個格子佔領了這行這列,求只有一個格子佔滿一行一列的方案數。
解題報告
因為 n∗m n ∗ m <script type="math/tex" id="MathJax-Element-5">n*m</script>是最大的,所以他肯定佔領一行一列,所以這樣的話我們就必須保證其他的數都不能同時佔領一行一列了。
如果我們隨便把 n∗m n ∗ m <script type="math/tex" id="MathJax-Element-6">n*m</script>放在某個格子上,接下來放 n∗m−1 n ∗ m − 1 <script type="math/tex" id="MathJax-Element-7">n*m-1</script>,那麼為了保證”其他數不能佔領“,那麼它只能放在 n∗m n ∗ m <script type="math/tex" id="MathJax-Element-8">n*m</script>所在行列上。再往下處理也是一樣,但是除了前面比它大的數所在行列之外,在交叉點上也可以放,同時被兩個大數壓制。
那麼就可以選擇從大到小放,根據前面的策略,發現要滿足題目限制,有三種可行的方案。
1.放在已覆蓋的一行上,只佔領一列。
2.放在已覆蓋的一列上,只佔領一行。
3.放在已覆蓋的一行一列交點處,沒有佔領。
考慮DP, f[i][j][k] f [ i ] [ j ] [ k ] <script type="math/tex" id="MathJax-Element-9">f[i][j][k]</script>表示已覆蓋 i i <script type="math/tex" id="MathJax-Element-10">i</script>行 j j <script type="math/tex" id="MathJax-Element-11">j</script>列,還有 k k <script type="math/tex" id="MathJax-Element-12">k</script>個已覆蓋的交點有空位的方案數,初始 f[1][1][0]=n∗m f [ 1 ] [ 1 ] [ 0 ] = n ∗ m <script type="math/tex" id="MathJax-Element-13">f[1][1][0]=n*m</script>, 答案就是 f[n][m][0] f [ n ] [ m ] [ 0 ] <script type="math/tex" id="MathJax-Element-14">f[n][m][0]</script>。
三種方案轉移一下……還是見程式碼吧。
示例程式碼
#include<cstdio>
#define LL long long
using namespace std;
int tst,n,m,tt;
LL f[85][85][6405];
int main()
{
freopen("nash.in","r",stdin);
freopen("nash.out","w",stdout);
scanf("%d",&tst);
while (tst--){
scanf("%d%d%d",&n,&m,&tt);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=0;k<=i*j;k++) f[i][j][k]=0;
f[1][1][0]=n*m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=i*j;k>=0;k--)
if (f[i][j][k]){
if (i<n) f[i+1][j][k+j-1]=(f[i+1][j][k+j-1]+f[i][j][k]*((n-i)*j))%tt;
if (j<m) f[i][j+1][k+i-1]=(f[i][j+1][k+i-1]+f[i][j][k]*((m-j)*i))%tt;
if (k) f[i][j][k-1]=(f[i][j][k-1]+f[i][j][k]*k)%tt;
}
printf("%lld\n",f[n][m][0]);
}
return 0;
}
相關文章
- HDU6415:Rikka with Nash Equilibrium(dp)UI
- 【dp+組合數學】hdu 2018 多校第九場 1001 Rikka with Nash Equilibrium hdu 6415UI
- 【記憶優化搜尋/dp】HDU - 6415 - 杭電多校第九場 - Rikka with Nash Equilibrium優化UI
- HDU 6415 Rikka with Nash Equilibrium (DP)UI
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- hdu 6415 Rikka with Nash EquilibriumUI
- 2018 Multi-University Training Contest 9----hdu 6415 Rikka with Nash EquilibriumAIUI
- ZZJC新生訓練賽第九場題解
- HDU 6415(dp/找規律-2018多校第九場1001)
- 2020牛客暑期多校訓練營(第三場)D Points Construction Problem 構造思維題Struct
- HDU多校第九次 6415 (dp
- ZZJC新生訓練賽第二場題解
- ZZJC新生訓練賽第七場題解
- 【學校訓練記錄】10月個人訓練賽3個人題解
- dp專題訓練
- ZZJC新生訓練賽第十八場題解
- HDU6415(DP)
- 2024牛客暑期多校訓練營2 解題報告
- 2024杭電多校第九場
- 做題小結 DP訓練
- 2024牛客暑期多校訓練營10 - L. Tada! - 題解
- 做題小結 dp訓練6
- 24.8.18 DP訓練
- 「模擬賽」多校 A 層聯訓 16
- 2024牛客暑期多校訓練營9
- 2024牛客暑期多校訓練營8
- 2024牛客暑期多校訓練營6
- 2024牛客暑期多校訓練營2
- 2024牛客暑期多校訓練營4
- 2024牛客暑期多校訓練營5
- 2024牛客暑期多校訓練營1
- 杭電多校第10場 6887 Task Scheduler(DP)
- 看雪CTF.TSRC 2018 團隊賽 第九題『諜戰』 解題思路
- 2024牛客暑期多校訓練營2 HI
- 牛客網暑期ACM多校訓練營(第三場)C Shuffle Cards(splay)ACM
- 2020牛客暑期多校訓練營(第一場)H Minimum-cost Flow
- 【訓練題19:概率DP】One Person Game | ZOJ3329GAM
- 4.17訓練賽