动态规划入门——Piggy-Bank

转载请注明出处:http://blog.csdn.net/a1dark

分析:这题是一个裸的完全背包+刚好装满、求最小值、注意初始化、然后将01背包逆序、在把max改为min就行了、

#include<stdio.h>
#include<algorithm>
using namespace std;
int w[501];
int c[501];
int dp[10001];
int main(){
    int t,a,b,n;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&a,&b,&n);
        int s=b-a;
        for(int i=0;i<n;i++)
            scanf("%d%d",&w[i],&c[i]);
        for(int i=0;i<=s;i++)
            dp[i]=9999999;
        dp[0]=0;
        for(int i=0;i<n;i++)
            for(int j=c[i];j<=s;j++)
                dp[j]=min(dp[j],dp[j-c[i]]+w[i]);
        if(dp[s]==9999999)
            printf("This is impossible.\n");
        else
            printf("The minimum amount of money in the piggy-bank is %d.\n",dp[s]);
    }
    return 0;
}


你可能感兴趣的:(ACM,动态规划入门)