codeforces 543A 完全背包
2015-05-08 21:49
309 查看
http://codeforces.com/problemset/problem/543/A
安排n个人写m行代码,每个人每行会出a[i]个bug,求最多出现b个bug的方案数。
一个二维的完全背包,每个人有两个状态:写j行代码出k个bug
dp[i][j][k] 前i个程序员写前行出现k个bug的方案数。
dp[i][j][k] = dp[i][j-1][k-a[i]] + dp[i-1][j][k];
注意这里数组会超内存,需要用滚动数组。
安排n个人写m行代码,每个人每行会出a[i]个bug,求最多出现b个bug的方案数。
一个二维的完全背包,每个人有两个状态:写j行代码出k个bug
dp[i][j][k] 前i个程序员写前行出现k个bug的方案数。
dp[i][j][k] = dp[i][j-1][k-a[i]] + dp[i-1][j][k];
注意这里数组会超内存,需要用滚动数组。
#include <iostream> using namespace std; int n, m, b; long long mod; long long a[505]; long long dp[2][505][505]; int main () { cin >> n >> m >> b >> mod; for (int i=1; i<=n; i++) { cin >> a[i]; } for (int i=1; i<=n; i++) dp[i % 2][0][0] = 1L; for (int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { for (int k=0; k<=b; k++) { if (k < a[i]) dp[i % 2][j][k] = dp[(i-1) % 2][j][k] % mod; else dp[i % 2][j][k] = (dp[i % 2][j-1][k - a[i]] + dp[(i-1) % 2][j][k]) % mod; } } } long long ans = 0; for (int i=0; i<=b; i++) { ans = (ans + dp[n % 2][m][i]) % mod; } cout << ans % mod << endl; return 0; }
相关文章推荐
- CodeForces 543A - Writing Code DP 完全背包
- [Codeforces 543A] Writing Code (完全背包DP)
- Codeforces 189A. Cut Ribbon 完全背包
- Codeforces 544C Writing Code【二维完全背包】
- Codeforces 526C Om Nom and Candies 完全背包
- Codeforces 284E Coin Troubles【思维+拓扑排序+完全背包】好题!
- codeforces 543A Writing Code(dp降维优化,完全背包思想)
- codeforces189 A. Cut Ribbon【完全背包】
- CODEFORCES 189A(完全背包完全装满)
- 【Codeforces 283 C. Coin Troubles】+ 拓扑序 + 完全背包
- cf 543A 完全背包
- Codeforces 189A - Cut Ribbon (dp + 完全背包)
- CodeForces 632E Thief in a Shop(DP|完全背包)
- CodeForces - 417A Elimination (完全背包)
- codeforces 543A A. Writing Code(完全背包优化dp )
- HDU Piggy-Bank (完全背包)
- hdu 1284 钱币兑换问题(完全背包)
- uva 10465 (完全背包)
- 动态规划总结(01背包 完全背包 多重背包)
- 背包问题模板(01背包,完全背包,多重背包)