动态规划

采药

https://ac.nowcoder.com/acm/problem/16650

思路:动态规划的背包问题。建立二维数组dp[i][j]表示前i个物品不超过j时采到的草药的最大总价值。dp[i][j]=max(dp[i-1][j],dp[i-1][j-V[i]]+V[i]*W[i]) 特殊情况:当j<v[i]时,dp[i][j]=dp[i-1][j]。
注意:可以不用初始化,当申请的数组为全局数组,不赋值默认值为0;

#include "iostream"
using namespace std;
int V[101];
int W[101];
int dp[101][1001];
int main()
{
    int T,n,i,x;
    cin>>T>>n;
    for(i=1;i<=n;i++){
        cin>>V[i]>>W[i];
    }
    for(i=1;i<=n;i++){
        for(int j=1;j<=T;j++){
            if(V[i]>j){
                dp[i][j]=dp[i-1][j];
            }else dp[i][j]=max(dp[i-1][j],dp[i-1][j-V[i]]+W[i]);
        }
    }
    cout<<dp[n][T];
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务