题解 | #牛牛吃草#
牛牛吃草
https://www.nowcoder.com/practice/f05254f070944ff792c0dfefabd94fec
简单dp,dp[i]表示当前在i位置的最大值。注意答案不是dp[n],因为最大的情况不一定可以走到n这个位置。时间复杂度n^2
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3+10;
int n;
int w[MAXN];
int a[MAXN];
int dp[MAXN];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&w[i]);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
int ans=0;
for(int i=1;i<=n;++i){
dp[i]=w[i];
for(int j=1;j<i;++j){
if( (i-j)%a[j] == 0 )dp[i] = max(dp[i], dp[j]+w[i]);
}
ans = max(ans,dp[i]);
}
printf("%d\n",ans);
return 0;
}