从后往前作比较简单
#include<stdio.h>
#include<string.h>
int dp[100000];
int L,s,t,n;
int main()
{
while(scanf("%d%d%d%d",&L,&s,&t,&n)!=EOF)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
int f;
scanf("%d",&f);
dp[f]=1;
}
int temp;
for(int i=L-t;i>=0;i--)
{
temp=dp[i+s];
for(int j=s+1;j<=t;j++)
{
if(dp[j+i]<temp)//如果可以不踩石子更新
temp=dp[j+i];
}
dp[i]+=temp;加到下一个数组里,dp[0]是结果
}
printf("%d\n",dp[0]);
}
return 0;
}