[NOIP2005] 过河
9pts
看样子是要大改了
#include<bits/stdc++.h>
using namespace std;
#define M 105
#define int long long
int len,s,t,m;
map<int,bool>stone;
int stones[M];
map<int,int>dp;
signed main()
{
scanf("%lld%lld%lld%lld",&len,&s,&t,&m);
for(int i=1;i<=m;++i)
{
int t;
scanf("%lld",&t);
stones[i]=t;
stone[t]=1;
}
sort(stones+1,stones+m+1);
for(int i=1;i<=m;++i)
{
stone[stones[i]]=0;
stones[i]=stones[i-1]+(stones[i]-stones[i-1])%72;
stone[stones[i]]=1;
}
len=stone[m]+(len-stone[m])%72;
for(int i=1;i<=len;++i)
{
dp[i]=INT_MAX;
for(int j=max(0ll,i-t);j<=i-s;++j)
dp[i]=min(dp[i],dp[j]+stone[i]);
}
int ans=INT_MAX;
for(int i=max(0ll,len-t);i<=len;++i)
ans=min(ans,dp[i]);
printf("%lld",ans);
return 0;
}