杭电OJ――1114 Piggy-Bank(完全背包)(二)

2014-11-24 08:25:58 · 作者: · 浏览: 1
n,k[10001],fe;
cin>>t;
while(t--)
{
cin>>e>>f>>n;
fe = f - e;
for(int i = 0; i < n ; i++)
{
cin>>p[i]>>w[i];
}
k[0] = 0;
//完全背包的初始化!
for(int i = 1 ; i <= fe;i++)
{
k[i] = 50000000;
}
for(int i = 0 ; i < n ; i++)//选取硬币的种数
{
for(int m = w[i] ; m <= fe;m++)//重量
{
if(k[m-w[i]]+p[i]
k[m] = k[m-w[i]] + p[i];
}
}
if(k[fe] == 50000000)
printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",k[fe]);
}
return 0;
}
*/
#include
using namespace std;
const int MAX=10050;
int f[MAX],w[MAX];//f数组记录硬币的面值,w数组记录硬币的重量
int k[MAX];//k数组用来记录最小取值
int main()
{
int num,i;
cin>>num;
while(num--)
{
int e,t,temp;
int cases;
cin>>e>>t>>cases;
temp=t-e;
for(i=0;i
cin>>f[i]>>w[i];
k[0]=0;//重量为0的钱币价值为0,即没有钱币
for(i=1;i<=temp;i++)
{
k[i]=999999999;
}
for(i=0;i
for(int m=w[i];m<=temp;m++)
if(k[m-w[i]]+f[i]
k[m]=k[m-w[i]]+f[i];
if(k[temp]==999999999)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",k[temp]);
}
//system("pause");
return 0;
}