简单dp
dp[i][j];跳i次到j可以吃到的虫
#include<stdio.h>
#include<string.h>
int dp[110][110],w[110];
int main()
{
int i,j,k,a,b,n,p,max,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&n,&a,&b,&k);
for(i=0;i<n;i++)
scanf("%d",&w[i]);
memset(dp,-1,sizeof(dp));
for(i=0;i<=k;i++)
dp[i][0]=w[0];
for(i=1;i<=k;i++)
for(j=n-1;j>=0;j--)
for(p=a;p<=b;p++)
{
if(j-p<0)break;
if(dp[i-1][j-p]==-1){continue;}
if(dp[i][j]<dp[i-1][j-p]+w[j])
dp[i][j]=dp[i-1][j-p]+w[j];
}
max=-1;
for(i=0;i<n;i++)
if(max<dp[k][i])
max=dp[k][i];
printf("%d\n",max);
}
return 0;
}