题解 | #牛牛吃草#

牛牛吃草

https://www.nowcoder.com/practice/f05254f070944ff792c0dfefabd94fec

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin>>n;
    vector<int> w(n),a(n);
    for(int i=0;i<n;i++) cin>>w[i];
    for(int i=0;i<n;i++) cin>>a[i];
    int ans=w[0];
    for(int i=1;i<n;i++){
        int maxnum=0;
        for(int j=0;j<i;j++) if((i-j)%a[j]==0) maxnum=max(maxnum,w[j]);
        w[i]+=maxnum;
        ans=max(ans,w[i]);
    }
    cout<<ans<<endl;
    return 0;
}

动态规划,dp[i]表示在i停止时,最多可以吃多少。对于每个dp[i],只需要遍历之前的dp[j] (j<i),对于能走到i的那些(即满足(i-j)%a[j]==0),记录他们的最大值,该最大值+w[i]即为dp[i]。这里其实不需另设dp,直接将w数组用作dp数组即可。

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务