dp訓練計劃——完全揹包板子題

題目鏈接:https://vjudge.net/problem/HDU-1114

題目大意:

給你一個罐子的承受重量V,然後給你n種金幣,每一種金幣有兩個屬性,價值C[i]和重量W[i],每一種金幣有無限個。

然後讓你判斷是否能用罐子裝重量爲V的金幣,如果能,請輸出重量爲V時金幣的最小价值。

題解:

完全揹包模板題,不過要注意初始化問題,在揹包九講裏面也都講了,不懂的自行百度。 

trick:注意數組要開大點,不然會TLE,記住是TLE,具體原因和後臺linux系統有關。

代碼實現:

#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
#define PI atan(1.0)*4
#define E 2.718281828
#define rp(i,s,t) for (register int i = (s); i <= (t); i++)
#define RP(i,t,s) for (register int i = (t); i >= (s); i--)
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset(a,b,sizeof(a))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define debug printf("ac\n");
using namespace std;
inline int read()
{
    int a=0,b=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')
            b=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        a=(a<<3)+(a<<1)+c-'0';
        c=getchar();
    }
    return a*b;
}
const int INF = 0x3f3f3f3f;
const int N = 1e4+7;
int C[N],W[N];
int dp[N];
int main(){
    int T=read();
    while(T--){
        int e=read(),f=read();
        int V=abs(f-e);
        int n=read();
        rp(i,1,n) C[i]=read(),W[i]=read();
        mst(dp,INF);
        dp[0]=0;
        int cnt=0;
        // rp(i,1,n){
        //     if(W[i]>V) continue;
        //     int flag=0;
        //     rp(j,1,cnt){
        //         if(W[j]>=W[i]&&C[j]<=C[i])
        //             flag=1;
        //     if(flag) continue;
        //     C[++cnt]=C[i];
        //     W[cnt]=W[i]; 
        // }
        rp(i,1,n)
            rp(j,W[i],V)
                dp[j]=min(dp[j-W[i]]+C[i],dp[j]);
        if(dp[V]!=INF) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]);
        else printf("This is impossible.\n");
    }
    return 0;
}
/*
1 7
3
3 3
6 6
2 2 
*/  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章