动态规划--装满背包的最小价值--hdu1114 Piggy-bank

给定存钱罐重量f - e,n种硬币的价值p,重量w。求里面最少有多少钱。

1.最少价值,全部初始化为inf,dp[0] = 0,转移的时候求min

2.装满背包,看dp[f - e] 是否仍为inf,是的话,说明背包不满。


#include

#include

#include

using namespace std;

const int maxn = 500 + 5;

const int maxv = 10000 + 5;


int p[maxn],w[maxn];//价值 费用

const int INF = 1 << 30;

int dp[maxv];


int main()

{

    int T;

    cin >> T;

    while (T --) {

        int e,f;

        scanf("%d%d",&e,&f);

        f -= e;

        int n;

        scanf("%d",&n);

        for (int i = 1; i <= n ; i ++) {

            scanf("%d%d",&p[i],&w[i]);

        }

        fill(dp, dp + maxv,INF);

        dp[0] = 0;

        for (int i = 1; i <= n; i ++) {

            for (int j = w[i]; j <= f; j ++) {

                dp[j] = min(dp[j],dp[j - w[i]] + p[i]);

            }

        }

        if (dp[f] == INF) {

            printf("This is impossible.\n");

        }

        else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[f]);

    }

    return 0;

}


你可能感兴趣的:(动态规划)