简单DP,但是还是思考了好久
dp【i】【j】表示跳i次,到位置j的吃虫子总数。
dp【i】【l】=max(dp【i-1】【j】+ A【l】),我是控制,从位置j跳到位置l。
#include"stdio.h"
#include"string.h"
#define N 101
int main()
{
int T;
int i,j,l;
int n,a,b,k;
int A[N],dp[N][N*10];
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&n,&a,&b,&k);
for(i=0;i<n;i++)
scanf("%d",&A[i]);
memset(dp,0,sizeof(dp));
for(i=0;i<=k;i++)
dp[i][0]=A[0];
int max;
for(i=1;i<=k;i++)
{
for(j=0;j<n;j++)
{
for(l=j+a;l<=j+b&&l<n;l++)
{
if(dp[i][l]<dp[i-1][j]+A[l])
dp[i][l]=dp[i-1][j]+A[l];
}
}
}
max=-1;
for(i=0;i<n;i++)
{
for(j=0;j<=k;j++)
if(dp[j][i]>max)max=dp[j][i];
}
printf("%d\n",max);
}
return 0;
}