dp之完全背包poj3181(高精度背包)
这个题目要用到大数的加法,其他的,我没有感觉到有什么难想的......比较水的背包题,掠过.....
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int s[2000][2],dp[150],t[150][3]; int main() { int text; scanf("%d",&text); while(text--) { int n,m; scanf("%d %d",&n,&m); for(int i=1;i<=m;i++) scanf("%d %d %d",&t[i][0],&t[i][1],&t[i][2]); int cnt=0; for(int i=1;i<=m;i++) { int k=1; while(t[i][2]-k>0) { s[cnt][0]=k*t[i][0]; s[cnt++][1]=k*t[i][1]; t[i][2]-=k; k*=2; } s[cnt][0]=t[i][2]*t[i][0]; s[cnt++][1]=t[i][2]*t[i][1]; } memset(dp,0,sizeof(dp)); for(int i=0;i<cnt;i++) { for(int j=n;j>=s[i][0];j--) if(dp[j]<dp[j-s[i][0]]+s[i][1]) dp[j]=dp[j-s[i][0]]+s[i][1]; } printf("%d\n",dp[n]); } return 0; }
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。