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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】