AHOI2009中國象棋 巧妙dp

2021-07-26 09:40:42 字數 535 閱讀 8122

題目意思是在乙個n*m(n,m<=100)的矩形裡放任意多個棋子,滿足任一行任一列都最多只有2個棋子,求方案數。

考慮用dp,設三維dp[i][j][k],代表列舉到i行,有j列只有1個棋子,k列有2個棋子的方案數,那麼放0個棋子的列數就是m-j-k了。

在第i行只能放0,1,2個棋子,那麼我們模擬一下,就可以推出dp方程了。

#include#includeusing namespace std;

const int maxn=105,mod=9999973;

int dp[maxn][maxn][maxn];

int c_2(int x)

int main()if(j)dp[i][j][k]%=mod;

}for(int j=0;j<=m;j++)

for(int k=0;k<=m-j;k++)

res+=dp[n][j][k],res%=mod;

printf("%d\n",res);

return 0;

}

AHOI2009 中國象棋 巧妙DP

ahoi2009 中國象棋 題目描述 這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有...

AHOI2009中國象棋

狀態很難想。本題難就難在如何定狀態。再看題解之前,我一點思路也沒有。看到題解的狀態表示後,我立刻知道怎麼做了。f i j k 表示至第i行,有j列放1個,有k列放2個。這樣f i j k 即為第i行不放 放1個 放2個的數量總和。狀態轉移方程很長,用到組合的相關知識。i 1時需特殊處理。詳見 inc...

AHOI2009 中國象棋

題目描述 這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起...