藍橋杯 01揹包

這裏寫圖片描述

思路

動態規劃基礎題目。關於動態規劃的詳解點擊這裏

代碼

#include<iostream>
#include<cstring>
using namespace std;

int max(int x,int y){
    if(x>y) return x;
    return y;
}

int main(){
    //freopen("data.txt","r",stdin);
    int n,m;
    cin>>n>>m;//n件物品,最大容量m 
    int w[n+1],v[n+1];
    for(int i=1;i<=n;i++){
        cin>>w[i]>>v[i];
    }
    int dp[n+1][m+1];//dp[i][j]: 面對第i件物品且揹包容量爲j時的最大價值dp[i][j] 
    memset(dp,0,sizeof(dp));

    //動態規劃
    for(int i=1;i<=n;i++){//第i件物品 
        for(int j=1;j<=m;j++){//最大容量j 
            if(w[i]<=j){//裝得下 
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
            }else{//裝不下 
                dp[i][j]=dp[i-1][j];
            }
        }
    }
    cout<<dp[n][m]; 
    return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章