一开始把INF初始化为0x7fffffff,第三组样例不过,其实在d[j-w[i]]+p[i]这里溢出了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#define MAXN 10010
using namespace std;
const int INF =1000000001;
int main()
{
//freopen("in.txt","r",stdin);
int cas,e,f,n,p[MAXN],w[MAXN],d[MAXN];
cin>>cas;
while(cas--)
{
cin>>e>>f>>n;
for(int i=1; i<=n; i++)
cin>>p[i]>>w[i];
for(int i=1; i<=f-e; i++)
d[i]=INF;
d[0]=0;
for(int i=1; i<=n; i++)
{
for(int j=w[i]; j<=f-e; j++)
{
if(d[j]>d[j-w[i]]+p[i])
d[j]=d[j-w[i]]+p[i];
}
}
if(d[f-e]==INF)
cout<<"This is impossible.\n";
else
cout<<"The minimum amount of money in the piggy-bank is "<<d[f-e]<<".\n";
}
return 0;
}