#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int w[10010];
int p[10010];
int main()
{
int ca,n,weight,value,i,j,m;
scanf("%d",&ca);
while(ca--)
{
scanf("%d%d",&weight,&value);
m=value-weight;
scanf("%d",&n);
memset(w,0,sizeof(w));
memset(p,0,sizeof(p));
while(n--)
{
scanf("%d%d",&value,&weight);
for(i=weight;i<=m;i++)
{
if(w[i]<w[i-weight]+weight)
{
w[i]=w[i-weight]+weight;
p[i]=p[i-weight]+value;
}
else if(w[i]==w[i-weight]+weight)
{
p[i]=min(p[i],p[i-weight]+value);
}
}
}
if(w[m]==m)
printf("The minimum amount of money in the piggy-bank is %d.\n",p[m]);
else
printf("This is impossible.\n");
}
}poj1384
最新推荐文章于 2019-07-19 16:01:00 发布
本文提供了一个使用C++解决背包问题的程序代码,包括输入数据读取、动态规划算法实现以及输出最优解的过程。
561

被折叠的 条评论
为什么被折叠?



