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

分析:一开始我也只想着用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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值