您的位置:首页 > 其它

(水)牌型种数 蓝桥杯2015年A组真题(背包问题)

2016-03-19 12:09 260 查看
分析:一开始我也只想着用dfs()给写出来,后来发现判重还有剪枝啥的都不太好搞出来,于是这才想到用DP来解,往往组合问题可以当成是选择问题用背包来解,以后多长个心眼吧!这里我们用dp[i][j]表示前i个数(即1-i)中选择j个,

决策为选择k个i,则状态转移为dp[i][j]=Σ(k 0-4)dp[i-1][j-k]

直接上代码:

#include <cstdio>
int dp[15][15];
int main()
{
dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;
for (int i = 2; i <= 13; i++)
for (int j = 0; j <= 13; j++)
for (int k = 0; k <= 4; k++)
if (j >= k) dp[i][j] += dp[i - 1][j - k];
printf("%d\n", dp[13][13]);
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: