http://poj.org/bbs?problem_id=1384
完全背包问题,训练赛上没有注意初始化,悲催的结局中...
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define manx 505
#define inf 99999999
int x[manx],y[manx];
int dp[10009];
int main(){
int t,e,f;
scanf("%d",&t);
while(t--){
int n,flag=0;
scanf("%d%d%d",&e,&f,&n);
int sum=f-e;
for(int i=0;i<550;i++)
x[i]=y[i]=0;
for(int i=0;i<=10009;i++) // 初始化问题
dp[i]=inf;
dp[0]=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
}
for(int i=1;i<=n;i++){ // 完全背包状态转移方程
for(int j=y[i];j<=sum;j++){
dp[j]=min(dp[j],dp[j-y[i]]+x[i]);
}
}
if(dp[sum]==inf) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[sum]);
}
}