hdu 1114
完全背包问题,并且要求恰好装满背包
且求的是最小值
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> #define MAX 9999999999 using namespace std; int sumweight;// int weight[550]; int value[550]; int N;//硬币种类数目 __int64 d[10010]; int main() { int total; scanf("%d",&total); while(total--) { int a,b; scanf("%d %d",&a,&b); sumweight=b-a; scanf("%d",&N); int i,j; for(i=0;i<N;i++) { scanf("%d %d",&value[i],&weight[i]); value[i]*=(-1); } d[0]=0; for(i=1;i<=sumweight;i++) { d[i]=-1*MAX; } for(i=1;i<=N;i++) { for(j=0;j<=sumweight;j++) { if(j-weight[i-1]<0) { continue; } d[j]=d[j]>(d[j-weight[i-1]]+value[i-1])?d[j]:(d[j-weight[i-1]]+value[i-1]); } } if(d[sumweight]==(-1)*MAX) { printf("This is impossible.\n"); continue; } printf("The minimum amount of money in the piggy-bank is %I64d.\n",-1*d[sumweight]); } return 0; }