题解 | #牛牛吃草#
牛牛吃草
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; }