void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

经典背包,不用题解了,直接上代码吧

#include<stdio.h>
int min(int x,int y)
{
 if(x>y)
  return y;
 else
  return x;
}
int main()
{
 int t,n,v,x,y,i,j;
 int f[10001],p[501],w[501];
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d%d",&x,&y);
  v=y-x;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
   scanf("%d%d",&p[i],&w[i]);
  f[0]=0;
  for(i=1;i<=v;i++)
   f[i]=9999999;
  for(i=1;i<=n;i++)
   for(j=w[i];j<=v;j++)
  f[j]=min(f[j],f[j-w[i]]+p[i]);
  if(f[v]==9999999)
   printf("This is impossible.\n");
  else
   printf("The minimum amount of money in the piggy-bank is %d.\n",f[v]);
 }
 return 0;
}
posted on 2011-04-19 00:23  void-man  阅读(204)  评论(0)    收藏  举报