标签:des style blog http io ar color os sp
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 647 Accepted Submission(s): 246
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 105; 7 const int maxm = 10005; 8 int a[maxn], b[maxn]; 9 int dp[maxn][maxm]; 10 11 int main() { 12 int t; 13 int n, m, k; 14 scanf("%d",&t); 15 while(t--) { 16 scanf("%d %d %d",&n, &m, &k); 17 int Max = 0; 18 int INF = m * k; 19 for(int i = 1; i <= n; i++) { 20 scanf("%d %d",&a[i], &b[i]); 21 a[i]++; 22 Max += b[i]; 23 } 24 memset(dp, 0x3f, sizeof(dp)); 25 dp[0][0] = 0; 26 for(int i = 1; i <= n; i++) { 27 if(a[i] > k) continue; 28 for(int j = 0; j <= Max; j++) { 29 dp[i][j] = min(dp[i][j], dp[i - 1][j]); 30 if(dp[i - 1][j] <= INF) { 31 int pnum = dp[i - 1][j]; 32 int anum = a[i]; 33 int ans = 0; 34 if(pnum % k == 0 || (k - (pnum % k) ) >= anum) { 35 ans = pnum + anum; 36 } else { 37 ans = (pnum / k + 1) * k + anum; 38 } 39 if(ans <= m * k) { 40 dp[i][j + b[i]] = min(dp[i][j + b[i]], ans); 41 } 42 } 43 } 44 } 45 int ans = 0; 46 for(int j = Max; j >= 0; j--) { 47 if(dp[n][j] <= INF) { 48 ans = j; 49 break; 50 } 51 } 52 printf("%d\n",ans); 53 } 54 return 0; 55 } 56 57 58
标签:des style blog http io ar color os sp
原文地址:http://www.cnblogs.com/zhanzhao/p/4125895.html