一个不用倒推,便于理解
2026-09-10 19:44:02
发布于:浙江
20阅读
0回复
0点赞
其实我早在8.18就AC过了,忘写了,靠
题意就是你如果选一个,你下一个就得跳到
好了完事
思路就是直接每个下标都给他默认选,因为每个节点必定有被选中的可能,所以每个都默认选就能得出最好答案。
如果这个,直接把结果过渡到下一个,最后输出就行
看不懂直接评论。
AC code
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MCX=1e5+10;
int a[MCX],b[MCX],dp[MCX];
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
//dp[i]定义的是数组长度为i时,能得到的最大价值
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i]+a[i]);
if(i+b[i]<=n){
dp[i+b[i]]=max(dp[i+b[i]],dp[i]+a[i]);
}
dp[i+1]=max(dp[i],dp[i+1]);
}
cout<<ans;
return 0;
}
这里空空如也








有帮助,赞一个