HDOJ 1114 Piggy-Bank
题目:HDOJ 1114
该题属于完全背包问题,答案应满足:1、背包被放满,2、符合条件的最小值。因此将动规数组的初始值设为99999999(超过题设最大值)。
状态转移方程为:v[i][j]=min{v[i-1][j],v[i][j-w[i]]+p[i]}。
最后,如果动规数组最后一格数据不等于初始值,即为答案。
本题代码:
#include <stdio.h> int main(int argc, char *argv[]) { int t,e,f,n,p[510],w[510],v[10010],l,i,j,ans; scanf("%d",&t); while(t--) { scanf("%d%d",&e,&f); l=f-e; for(i=1;i<=l;i++) v[i]=99999999; v[0]=0; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&p[i],&w[i]); for(i=1;i<=n;i++) { for(j=w[i];j<=l;j++) { if(v[j-w[i]]<99999999) { if(v[j-w[i]]+p[i]<v[j]) v[j]=v[j-w[i]]+p[i]; } } } if(v[l]<99999999) printf("The minimum amount of money in the piggy-bank is %d.\n",v[l]); else printf("This is impossible.\n"); } return 0; }