讨论 / 为什么挂了一个点。。。求教。
897357142 2012-07-24 07:56:00
点我顶贴 收藏 删除
测试结果1: 通过本测试点|有效耗时63ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 通过本测试点|有效耗时47ms

测试结果4: 通过本测试点|有效耗时62ms

测试结果5: 测试结果错误.错误结果为:299130300

正确结果应为:305235000

测试结果6: 通过本测试点|有效耗时63ms

测试结果7: 通过本测试点|有效耗时78ms

测试结果8: 通过本测试点|有效耗时109ms

测试结果9: 通过本测试点|有效耗时94ms

测试结果10:通过本测试点|有效耗时94ms

全部用int64,为什么会挂了一个点啊。。

#include"stdio.h"

__int64 n,r,g,b,t,ans=0;

__int64 s[1100][1100]={0};

void init()

{

__int64 i;

scanf("%I64d%I64d%I64d%I64d%I64d",&n,&r,&g,&b,&t);

for(i=2;i<=n;i++)

s[0][i]=s[0][i-1]+t*g;

}

__int64 max(__int64 a,__int64 b)

{

if(a>b) return a;

return b;

}

void use_nature()

{

__int64 i,j;

__int64 x,y,time,prison;

for(i=1;i<=n;i++)

for(j=1;j<=n-i;j++)

{

time=prison=0;

//i-1个减速,j个下毒。

time=t+b*(i-1);

prison=time*j*g;

x=s[i-1][j]+prison;

//i个减速,j-1个下毒。

time=t+b*i;

prison=time*(j-1)*g;

y=s[i][j-1]+prison;

s[i][j]=max(x,y);

}

}

void print()

{

__int64 i,j;

for(i=1;i<=n;i++)

for(j=1;j<=n-i;j++)

ans=max(ans,s[i][j]+(n-i-j)*(t+b*i)*(j*g+r));

printf("%I64d\n",ans);

}

int main()

{

init();

use_nature();

print();

getchar(),getchar();

return 0;

}

/*

*/

查看更多回复
提交回复