记录编号 418104 评测结果 AAAAAAAAAA
题目名称 [NOIP 2005]过河 最终得分 100
用户昵称 GravatarRegnig Etalsnart 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-06-29 10:12:34 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#define syy myson
using namespace std;
const int maxn=20000,INF=1000000000;
int l,s,t,m,a[101],b[maxn]={0},f[maxn],minn=INF,i,j;
int Main()
{
	freopen("river.in","r",stdin);freopen("river.out","w",stdout);
	scanf("%d%d%d%d",&l,&s,&t,&m);
	for(i=1;i<=m;i++)scanf("%d",&a[i]);
	sort(a+1,a+m+1);
	if(s==t)//特判 
	{
		int num=0;
		for(i=1;i<=m;i++)if(a[i]%s==0)num++;
		printf("%d",num);
		return 0;
	}
	
	for(i=0;i<=m;i++)if(a[i+1]-a[i]>t*10)//路径压缩 
	{
	    int	p=a[i+1]-a[i]-t*10;
		for(j=i+1;j<=m;j++)a[j]-=p;
	}
	
	for(i=1;i<=m;i++)b[a[i]]++;//石子标记 
	for(i=0;i<maxn;i++)f[i]=INF;
	for(i=s;i<=t;i++)
	{
		if(b[i])f[i]=1;
		else f[i]=0;
	}
	
	for(i=t+1;i<=a[m]+t;i++)for(j=s;j<=t;j++)
	if(f[i]>f[i-j]+b[i])f[i]=f[i-j]+b[i];
	
	for(i=a[m];i<=a[m]+t;i++)
	if(f[i]<minn)minn=f[i];
	
	printf("%d",minn);
	return 0;
}
int main(){;}
int syy=Main();