题目大意:有一只青蛙,刚开始在1这个位置,它只能往前跳,且跳跃的距离在[A,B],最多跳K次。它只能把它所在位置的蚊子吃了,问最多能吃多少只蚊子
解题思路:01背包裸题
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n, a, b, k;
int num[N];
int dp[N][N];
void init() {
scanf("%d%d%d%d", &n, &a, &b, &k);
memset(num, 0, sizeof(num));
int t;
for (int i = 1; i <= n; i++)
scanf("%d", &num[i]);
}
void solve() {
memset(dp, 0, sizeof(dp));
dp[1][0] = num[1];
for (int i = 1; i <= k; i++)
for (int j = n; j >= 1; j--) {
dp[j][i] = dp[j][i - 1];
if (j > a) {
for (int l = a; l <= b; l++)
if (j > l) dp[j][i] = max(dp[j][i], dp[j - l][i - 1] + num[j]);
}
}
int ans = 0;
for (int i = 0; i <= n; i++)
ans = max(ans, dp[i][k]);
printf("%d\n", ans);
}
int main() {
int test;
scanf("%d", &test);
while (test--) {
init();
solve();
}
return 0;
}