讨论 / 新手求助——过河 017
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.

我的方案没有加优化。但是也不应该出这么个结果啊.....

求高手指教下我的方法哪里错了。还有能否给我讲一下这么优化(提交后题解没看懂......)

查看更多回复
提交回复