c_cpp RodCutting - 基本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp RodCutting - 基本相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

// #DynamicProgramming #StandardProblem

// Memoization

int maxProfit(int l, vector<int> val){
    if(l<=0){
        return 0;
    }
    if(val[l]==0){
        return 0;
    }
    int maxP=INT_MIN;
    for(int j=1;j<=l;j++){
        int with=val[j] + maxProfit(l-j, val);
        int without= maxP;
        maxP=max(with,without);
    }
    return maxP;
}

int maxProfitBU(int l, vector<int> val){
    vector<int> dp(l+1);

    dp[0]=0;
    for(int i=1;i<=l;i++){
        if(val[i]==0){
            dp[i]=0;
        }
        dp[i]=INT_MIN;
        for(int j=1;j<=i;j++){
            int with= val[j]+dp[i-j];
            int without = dp[i];
            dp[i]=max( with, without );
        }
    }
    return dp[l];
}


int main(){
    freopen("ip.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        int l;
        cin>>l;
        vector<int> val(l+1);
        //prices of cuts 1 to l
        for(int i=1;i<=l;i++){
            cin>>val[i];
        }
        cout<<"Memoization: "<<maxProfit(l,val)<<endl;
        cout<<"BottomUp: "<<maxProfitBU(l,val)<<endl;
    }
}

以上是关于c_cpp RodCutting - 基本的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 基本设定

c_cpp 【18】基本鼠标操作

c_cpp 基本C ++模板

c_cpp 基本C ++模板

c_cpp c ++基本模板

c_cpp FMDB基本使用