第五周 2.14-2.21
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五周 2.14-2.21相关的知识,希望对你有一定的参考价值。
汪!汪汪汪!汪汪!(热烈庆祝ENIAC诞生70周年)
2.14
CF 626 F Group Projects
dp[i][j][k]前i人,j组未闭合,总和为k。
每个人转移考虑4种,自成1组,新开1组,加入1组,闭合1组。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 typedef long long LL; 7 const LL mod = 1e9 + 7; 8 LL dp[222][1111], cpy[222][1111]; 9 int a[555]; 10 11 int main(void) 12 { 13 int n, k; 14 scanf("%d %d", &n, &k); 15 for(int i = 0; i < n; i++) scanf("%d", a + i); 16 sort(a, a + n); 17 dp[0][0] = 1; 18 for(int i = 0; i < n; i++) 19 { 20 memcpy(cpy, dp, sizeof(cpy)); 21 memset(dp, 0, sizeof(dp)); 22 for(int j = 0; j <= n; j++) 23 { 24 for(int r = 0; r <= k; r++) 25 { 26 int t = j * (a[i] - a[i-1]); 27 if(r + t > k) continue; 28 dp[j][r+t] = (dp[j][r+t] + cpy[j][r]) % mod; 29 dp[j+1][r+t] = (dp[j+1][r+t] + cpy[j][r]) % mod; 30 if(j) dp[j][r+t] = (dp[j][r+t] + cpy[j][r] * j % mod) % mod; 31 if(j) dp[j-1][r+t] = (dp[j-1][r+t] + cpy[j][r] * j % mod) % mod; 32 } 33 } 34 } 35 LL ans = 0; 36 for(int i = 0; i <= k; i++) ans = (ans + dp[0][i]) % mod; 37 printf("%I64d\n", ans); 38 return 0; 39 }
以上是关于第五周 2.14-2.21的主要内容,如果未能解决你的问题,请参考以下文章