記憶化搜索 hdu oj2602 Bone Collector 01揹包問題

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2602
中文題目:
在這裏插入圖片描述
思路:
在這裏插入圖片描述

代碼:

#include <iostream>
#include <algorithm>
using  namespace std;
int recode[1000][1000]{0};
int value[1000];//價值
int v[1000];//體積
int cases,nums,bagv;
int resolve(int i,int remainV);
int main(){
    cin>>cases;
    while (cases--){
        cin>>nums>>bagv;
        for(int i = 0;i<nums;i++)
            scanf("%d",&value[i]);
        for(int i = 0;i<nums;i++)
            scanf("%d",&v[i]);
        memset(recode,0, sizeof(recode));//重置記憶化數組
        printf("%d\n",resolve(0,bagv));
    }
    return 0;
}

int resolve(int i,int remainV){
    if (recode[i][remainV] != 0)
        return recode[i][remainV];
    int res;
    if(i == nums){//物品已經選擇完畢,這一輪就沒有新的價值
        res = 0;
    } else if(v[i]>remainV){ //此物品在剩餘的揹包空間放不下
        res =  resolve(i+1,remainV);
    } else{
        res =  max(resolve(i+1,remainV),resolve(i+1,remainV-v[i])+value[i]);//取放與不放的最大價值
    }
    return recode[i][remainV] = res;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章