完全背包问题

来源:互联网 发布:商标查询软件下载 编辑:程序博客网 时间:2024/05/18 03:04

#include<iostream>
#include<string>
using namespace std;
#define min(a,b) a<b?a:b

int w[501],p[501];
int f[100001];
int main()
{
 int t,i,j,n,a,b,MAX;
 freopen("D:\\input.txt","r",stdin);
 cin>>t;
 while(t--)
 {
  cin>>a>>b;
  MAX=b-a;
  cin>>n;
  for(i=0;i<n;i++)
  {
   cin>>p[i]>>w[i];
  }
  for(i=0;i<=100000;i++)
  {
   f[i]=1000000;
  }
  f[0]=0;
  for(i=0;i<n;i++)
  {
   for(j=w[i];j<=MAX;j++)
   {
    f[j]=min(f[j],f[j-w[i]]+p[i]);
   }
  }
  if(f[MAX]<1000000)
  {
   cout<<"The minimum amount of money in the piggy-bank is "<<f[MAX]<<'.'<<endl;
  }
  else
   cout<<"This is impossible."<<endl;
 }
 return 0;
}

0 0
原创粉丝点击