| 记录编号 |
114613 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
1155.最优分解方案II |
最终得分 |
100 |
| 用户昵称 |
return 0; |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.003 s |
| 提交时间 |
2014-07-31 19:39:00 |
内存使用 |
0.29 MiB |
显示代码纯文本
#include<cstdio>
int a[45],b[45],c[45],temp1,temp2,sum[100]={1,1},n=0;
void csh();
int main()
{
freopen("maxmul.in","r",stdin);
freopen("maxmul.out","w",stdout);
scanf("%d",&n);
if(n<=4) printf("%d",n);
if(n==8) printf("15");
else csh();
}
void csh()
{
for(int i=2;i<=450;i++)
{
a[0]=1;
a[i]=a[i-1]+i+2;
b[i-1]=a[i]-i+3;
if(n<b[i-1])
{
temp1=n-b[i-2];
temp2=i-1;
break;
}
}
for(int i=temp2;i>=1;i--)
{
c[i]=i+1;
}
for(int i=1;i<=temp1;i++)
{
c[(temp2-i+1)]+=1;
}
for(int i=1;i<=temp2;i++)
{
printf("%d ",c[i]);
}
for(int i=1;i<=temp2;i++)
{
for(int j=1;j<=sum[0];j++) sum[j]*=c[i];
for(int j=1;j<=sum[0];j++)
{
if(sum[j]>=10000)
{
sum[j+1]+=sum[j]/10000;
sum[j]%=10000;
}
}
if(sum[sum[0]+1]) sum[0]++;
}
printf("%d",sum[sum[0]]);
for(int i=sum[0]-1;i>=1;i--)
printf("%04d",sum[i]);
}