标签:
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; #define N 510 #define INF 0xffffff int n, m; int p[N], h[N], c[N]; int P[N], H[N], dp[N], k; void Slove() ///重点就在于怎样的把它转化为01背包 { int i, j; k=1; for(i=1; i<=n; i++) { for(j=1; j<c[i]; j*=2) { P[k] = p[i] * j; H[k++] = h[i] * j; c[i] -= j; } if(c[i]) { P[k] = p[i]*c[i]; H[k++] = h[i]*c[i]; } } k--; } int main() { int T; scanf("%d", &T); while(T--) { int i, j; scanf("%d%d", &m, &n); for(i=1; i<=n; i++) scanf("%d%d%d", &p[i], &h[i], &c[i]); Slove(); memset(dp, 0, sizeof(dp)); for(i=1; i<=k; i++) for(j=m; j>=P[i]; j--) dp[j] = max(dp[j], dp[j-P[i]]+H[i]); printf("%d\n", dp[m]); } return 0; }
(多重背包)hdu--2191--悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
标签:
原文地址:http://www.cnblogs.com/YY56/p/5244692.html