POJ 1384 Piggy-Bank 完全揹包

題意:給出儲錢罐初始的重量,放入錢後的重量。給出N種貨幣,貨幣的價值和重量。問儲錢罐中錢的最少的價值是多少。

思路:因爲錢的數量可以認爲是無限的,所以是個完全揹包。

注意:注意初始化。

代碼如下:

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int MAX = 50000;

int dp[MAX],w[MAX],v[MAX];

int main(void)
{
    //freopen("input.txt","r",stdin);
    int T,E,F,N;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d",&E,&F,&N);
        F -= E;
        for(int i = 0; i < N; ++i)
            scanf("%d%d",&v[i],&w[i]);
        memset(dp,0x3f,sizeof(dp));
        dp[0] = 0;
        for(int i = 0; i < N; ++i)
            for(int j = w[i]; j <= F; ++j)
                dp[j] = min(dp[j],dp[j-w[i]]+v[i]);
        if(dp[F] == 0x3f3f3f3f)
            puts("This is impossible.");
        else
            printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F]);
    }
    return 0;
}

發佈了283 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章