完全背包 Codeforces Round #302 (Div. 2) C Writing Code
2015-05-08 19:38
351 查看
题目传送门
/* 题意:n个程序员,每个人每行写a[i]个bug,现在写m行,最多出现b个bug,问可能的方案有几个 完全背包:dp[i][j][k] 表示i个人,j行,k个bug dp[0][0][0] = 1 表示不选择人的时候所有的bug的种类犯错误都只有一种 dp[i][j][k] += dp[i%2][j-1][k-a[i]]; 错误示范:dp[i][j][k] += dp[i-1][j-l][k-l*a[i]]; 其实要从上一行的状态推出,即少一行 内存限制,滚动数组使用 详细解释:http://www.cnblogs.com/wikioibai/p/4487409.html */ #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> using namespace std; const int MAXN = 5e2 + 10; const int INF = 0x3f3f3f3f; int a[MAXN]; int dp[2][MAXN][MAXN]; int main(void) //Codeforces Round #302 (Div. 2) C Writing Code { //freopen ("C.in", "r", stdin); int n, m, b; long long mod; while (scanf ("%d%d%d%I64d", &n, &m, &b, &mod) == 4) { memset (dp, 0, sizeof (dp)); for (int i=1; i<=n; ++i) scanf ("%d", &a[i]); dp[0][0][0] = 1; for (int i=1; i<=n; ++i) { for (int j=0; j<=m; ++j) { for (int k=0; k<=b; ++k) { dp[i%2][j][k] = dp[(i+1)%2][j][k]; if (j > 0 && k >= a[i]) dp[i%2][j][k] = (dp[i%2][j][k] + dp[i%2][j-1][k-a[i]]) % mod; } } } long long ans = 0; for (int i=0; i<=b; ++i) ans = (ans + dp[n%2][m][i]) % mod; printf ("%I64d\n", ans); } return 0; }
相关文章推荐
- CodeForces 543A - Writing Code DP 完全背包
- A. Writing Code 完全背包
- Codeforces Round #119 (Div. 2) / 189A Cut Ribbon (完全背包)
- 完全背包——Codeforces Round #302 (Div. 2) C. Writing Code
- Codeforces Round #302 (Div. 2)C (完全背包)
- 【Codeforces Round 365 (Div 2)B】【容斥】Mishka and trip 环加完全点图的边权乘积和
- Codeforces 544C Writing Code【二维完全背包】
- Codeforces Round #161 (Div. 2)(完全)
- Educational Codeforces Round 39 (Rated for Div. 2) codeforces946 D. Timetable-数据处理+分组背包(处理炸裂)
- Codeforces Round #142 (Div. 1) (完全)
- Codeforces Round #419 (Div. 2)-树形dp&依赖背包&-E. Karen and Supermarket
- codeforces 543A A. Writing Code(完全背包优化dp )
- Codeforces Round #360 (Div. 2) E dp 类似01背包
- Codeforces Round #158 (Div. 2) (完全)
- Educational Codeforces Round 39 (Rated for Div. 2) D. Timetable (背包)
- Codeforces Round #163 (Div. 2)(完全)
- 【Codeforces Round 333 (Div 2)C】【最短路】The Two Routes 完全图两种双向边的最小最大距离
- Codeforces Round #174 (Div. 1)(完全)
- 【Codeforces Round 273 (Div 2)C】【贪心 脑洞】 Table Decorations 三种气球装饰桌子 同桌三个气球不完全同色的最多桌子装饰数
- Codeforces Round #419 (Div. 1) C. Karen and Supermarket(树上背包)