标签:
http://poj.org/problem?id=1276
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 29234 | Accepted: 10482 |
Description
Input
Output
Sample Input
735 3 4 125 6 5 3 350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 10 10
Sample Output
735 630 0 0
Hint
1 #include <iostream> 2 using namespace std; 3 4 const int N = 10; 5 6 int cash, n; 7 int dp[100001]; 8 int D[N], m[N]; 9 10 int main() 11 { 12 while(cin>>cash) 13 { 14 cin>>n; 15 int cnt = 0; 16 for(int i = 0; i < n; ++i) 17 { 18 cin>>m[i]>>D[i]; 19 } 20 21 memset(dp, 0, sizeof(dp)); 22 dp[0] = 1; 23 for(int i = 0; i < n; ++i) 24 { 25 if(m[i] * D[i] >= cash) 26 { 27 for(int j = D[i]; j <= cash; ++j) 28 { 29 dp[j] = dp[j] | dp[j-D[i]]; 30 } 31 } 32 else 33 { 34 int k = 1; 35 while(k < m[i]) 36 { 37 for(int j = cash; j >= k*D[i]; --j) 38 { 39 dp[j] = dp[j] | dp[j-k*D[i]]; 40 } 41 m[i] = m[i] - k; 42 k = k * 2; 43 } 44 for(int j = cash; j >= D[i]*m[i]; --j) 45 { 46 dp[j] = dp[j] | dp[j-D[i]*m[i]]; 47 } 48 } 49 } 50 51 for(int i = cash; i >= 0; --i) 52 { 53 if(dp[i]) 54 { 55 cout<<i<<endl; 56 break; 57 } 58 } 59 } 60 }
标签:
原文地址:http://www.cnblogs.com/ygw0616/p/4567224.html