问题描述
有一条长为
的走廊,小明站在走廊的一端,每次可以跳过不超过
格,每格都有一个权值
。
小明要从一端跳到另一端,(从
号位置跳到
号位置)不能回跳,最多不超过
次,请问他跳过的方格的权值和最大是多少?
输入格式
输入的第一行包含两个整数
,
,
,表示走廊的长度,小明每次跳跃的最长距离和小明可以跳的次数。
接下来
个整数,表示走廊每个位置的权值。
输出格式
输出一个整数。表示小明跳过的方格的权值和的最大值。
样例输入
8 5 3
3 4 -1 -100 1 8 7 6
样例输出
12
70分求助
#include<bits/stdc++.h>
using namespace std;
int F[1010][1010], oo = 1000000000,w[1010];
int main(){
int n,p,l=-10100,t;
cin>>n>>p>>t;
for(int i=1;i<=n;i++){
cin>>w[i];
}
F[0][0] = 0;
for (int i = 1; i <= n+1; ++i) F[0][i] = - oo;
for (int c = 1; c <= t; ++c){
F[c][0] = -oo;
for (int i = 1; i <= n+1; ++i) {
int LeiZhu = F[c-1][i-1] + w[i];
for(int j = i - p; j < i; ++j) {
if(j < 0) continue;
if (F[c-1][j]+w[i] > LeiZhu) LeiZhu = F[c-1][j] + w[i];
}
F[c][i] = LeiZhu;
}
}
for(int i=1;i<=t;i++){
l=max(F[i][n+1],l);
}
cout<<l;
return 0;
}