传送门
题目大意:
有一个存钱的储存罐,给你它存满钱之前和之后的重量,和几类硬币的面值和重量。
求装满储钱罐时最小能得到多少钱。
题解:完全背包变形。
因为要求最小 一开始赋值大数。
code:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int w1,w2,wi,t,k,f[10002],v[510],w[510]; int main() { scanf("%d",&t); while(t--) { memset(f,0x3f,sizeof(f)); f[0]=0; //** scanf("%d%d",&w1,&w2); wi=w2-w1; scanf("%d",&k); for(int i=1;i<=k;i++) scanf("%d%d",&v[i],&w[i]); for(int i=1;i<=k;i++) for(int j=w[i];j<=wi;j++) f[j]=min(f[j],f[j-w[i]]+v[i]); if(f[wi]==0x3f3f3f3f) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",f[wi]); } return 0; }
时间: 2024-11-06 05:59:56