题目:问题描述
有一条长为 n 的走廊,小明站在走廊的一端,每次可以跳过不超过 p格,每格都有一个权值 wi
小明要从一端跳到另一端,(从 0 号位置跳到 n + 1 号位置)不能回跳,最多不超过 t 次,请问他跳过的方格的权值和最大是多少?
输入格式
输入的第一行包含三个整数 n, p, t,表示走廊的长度,小明每次跳跃的最长距离和小明可以跳的次数。 接下来 n 个整数,表示走廊每个位置的权值。
输出格式
输出一个整数。表示小明跳过的方格的权值和的最大值。
样例输入
8 5 3
3 4 -1 -100 1 8 7 6
样例输出
12
数据规模
1 ≤ n, p, t ≤ 1000, -1000 ≤ wi ≤ 1000
本人得了80分,问题在哪里,求指教
#include <bits/stdc++.h>
using namespace std;
int a[1005];
long long dp[1005][1005];
int main() {
int n, p, t;
long long maxn = -9999;
cin >> n >> p >> t;
for (int i = 1; i <= n; i++)
cin >> a[i];
memset(dp, 128, sizeof(dp));
for (int i = 0; i <= n + 1 && i <= p; i++) {
dp[i][1] = a[i];
}
for (int i = 0; i <= n + 1; i++) {
for (int j = 2; j <= t; j++) {
for (int k = 1; k <= p && k < i; k++) {
dp[i][j] = max(dp[i][j], dp[i - k][j - 1] + a[i]);
}
}
}
for (int i = 1; i <= t; i++) {
maxn = max(maxn, dp[n + 1][i]);
}
cout << maxn;
return 0;
}