yujingping 2012-04-25 22:19:00
点我顶贴
收藏
删除
#include<stdio.h>
int l,s,t,m,shizi[100000009],f[100000099];
int min(int a,int b)
{
return a<=b? a : b;
}
int main()
{
int i,j,k,tmp;
scanf("%d%d%d%d",&l,&s,&t,&m);
for(i=1;i<=m;i++)
{
scanf("%d",&tmp);
shizi[tmp]=1;
}
f[0]=0;
for(i=1;i<l+t;i++)
{
int ming=999999999;
if(shizi[i]==0)
for(j=s;j<=t&&i-j>=0;j++)
{
ming=min(ming,f[i-j]);
}
else
for(j=s;j<=t&&i-j>=0;j++)
{
ming=min(ming,f[i-j])+1;
}
f[i]=ming;
}
int u=99999;
for(i=0;i<t;i++)
u=min(u,f[l+i]);
printf("%d",u);
return 0;
}
结果是过了四个点。后面的六个点我输出的结果一律是10.
我的方案没有加优化。但是也不应该出这么个结果啊.....
求高手指教下我的方法哪里错了。还有能否给我讲一下这么优化(提交后题解没看懂......)