测试结果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;
}
/*
*/