P1802 5倍经验日

有x个药物和n个敌人
战胜第i敌人可以获得win[i]的经验值,失败可以获得lose[i]经验值,要想战胜第i个敌人,需要使用c[i]个药物
求可以获得的最大经验值

1. 动态规划

有点类似分组背包,失败需要0个药物,战胜或输给同一个敌人不能同时发生,属于同一组
但该题战胜敌人可能使用0个药物,所以不能直接更新迭代,避免同时出现

void maxval(int V,vector<int>&lose,vector<int>&win,vector<int>&c){
    int n = c.size();
    vector<long long> dp(V+1);//dp[i]最大经验值
    long long res = 0;
    for(int i=0;i<n;i++) 
        for(int j=V;j>=0;j--){
            if(j>=c[i])
                dp[j] = max(dp[j]+lose[i],dp[j-c[i]]+win[i]); //做选择
            else 
                dp[j] = max(dp[j],dp[j]+lose[i]); //不消耗药水
            res = max(res,dp[j]);
        }
    cout<<res*5;
    return;
}
posted @   失控D大白兔  阅读(7)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示