| 比赛 | 
    防止颓废的小练习v0.4 | 
    评测结果 | 
    AAAAAAAAAA | 
    | 题目名称 | 
    过河 | 
    最终得分 | 
    100 | 
    | 用户昵称 | 
    _Itachi | 
    运行时间 | 
    0.000 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.00 MiB  | 
    | 提交时间 | 
    2016-10-25 08:08:51 | 
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 7500
#define fre freopen("river.in","r",stdin);freopen("river.out","w",stdout);
int _min(const int &a,const int &b){return a<b?a:b;}
int st[105],f[maxn],sb[105];
bool _Rabit();bool _RABIT=_Rabit();int main(){;}
bool _Rabit(){
	fre
	int L,s,t,n,suo;scanf("%d%d%d%d",&L,&s,&t,&n);
	/**/if(s==t){
		int tot=0,aa;
		while(n--){
			scanf("%d",&aa);
			if(aa%s==0)tot++;
		}
		printf("%d\n",tot);
		return 0;
	}
	suo=t*(t-1);
	for(int i=1;i<=n;i++)scanf("%d",&st[i]);
	sort(st+1,st+1+n);
	for(int i=1;i<=n;i++){
		if(st[i]-st[i-1]>suo)sb[i]=sb[i-1]+suo;
		else sb[i]=sb[i-1]+st[i]-st[i-1];
	}
	L=sb[n]+t+suo;
	memset(f,120,sizeof(int)*(L+5));f[0]=0;
	for(int cnt=1,i=1;i<=L;i++){
		if(i==sb[cnt]){
			cnt++;
			for(int v=s;v<=t&&v<=i;v++)
				f[i]=_min(f[i-v]+1,f[i]);
		}
		else for(int v=s;v<=t&&v<=i;v++)
				f[i]=_min(f[i-v],f[i]);
	}
	printf("%d\n",f[L]);
}