杭电OJ——1114 Piggy-Bank(完全背包)
发布时间: 2013-01-26 13:47:03 作者: rapoo
杭电OJ——1114 Piggy-Bank(完全背包)
310 11021 130 5010 11021 150 301 6210 320 4
The minimum amount of money in the piggy-bank is 60.The minimum amount of money in the piggy-bank is 100.This is impossible.
//完全没有想到,这道题目居然是一个完全背包问题!/*#include<iostream>#include<algorithm>using namespace std;struct Coin{int num,weight;float scale;};bool cmp(Coin a,Coin b){return a.scale>b.scale;}int main(){Coin coin[100];int num,sum,i;cin>>num;while(num--){int e,t,temp,a;int cases;cin>>e>>t>>cases;for(i=0;i<cases;i++){cin>>coin[i].num>>coin[i].weight;coin[i].scale=(float)coin[i].weight/(float)coin[i].num;}sort(coin,coin+cases,cmp);temp=t-e;if(temp<0){cout<<"This is impossible."<<endl;continue;}sum=0;for(i=0;i<cases;i++){a=temp/coin[i].weight;temp=temp-coin[i].weight*a;sum=sum+coin[i].num*a;}//if(temp!=0) //cout<<"This is impossible."<<endl;//elseprintf("The minimum amount of money in the piggy-bank is %d.\n",sum);}return 0;}*//*#include <iostream>#include <stdio.h>using namespace std;int main(){ int t,e,f,p[501],w[501],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] = 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<iostream>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<cases;i++)cin>>f[i]>>w[i];k[0]=0;//重量为0的钱币价值为0,即没有钱币for(i=1;i<=temp;i++){k[i]=999999999;}for(i=0;i<cases;i++)for(int m=w[i];m<=temp;m++)if(k[m-w[i]]+f[i]<k[m])k[m]=k[m-w[i]]+f[i];if(k[temp]==999999999)printf("This is impossible.\n");elseprintf("The minimum amount of money in the piggy-bank is %d.\n",k[temp]);}//system("pause");return 0;}