bzoj 1263: [SCOI2006]整数划分
Posted xiyuedong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 1263: [SCOI2006]整数划分相关的知识,希望对你有一定的参考价值。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 int a[3000],d[3000],n; 6 void cheng(int a1) 7 { 8 for(int i=1;i<=a[0];i++) 9 a[i]*=a1; 10 for(int i=1;i<a[0];i++) 11 { 12 a[i+1]+=a[i]/10000; 13 a[i]%=10000; 14 } 15 for(;a[a[0]]>=10000;) 16 { 17 a[a[0]+1]=a[a[0]]/10000; 18 a[a[0]]%=10000; 19 a[0]++; 20 } 21 return; 22 } 23 int xun(int a1) 24 { 25 if(a1<10) 26 return 1; 27 if(a1<100) 28 return 2; 29 if(a1<1000) 30 return 3; 31 return 4; 32 } 33 int main() 34 { 35 a[0]=1; 36 a[1]=1; 37 scanf("%d",&n); 38 for(;n>4;) 39 { 40 n-=3; 41 cheng(3); 42 } 43 cheng(n); 44 for(int i=1;i<=a[0];i++) 45 d[i]=xun(a[i]); 46 printf("%d\n",(a[0]-1)*4+d[a[0]]); 47 printf("%d",a[a[0]]); 48 int i; 49 for(i=a[0]-1;i>=max(1,a[0]-24);i--) 50 { 51 if(d[i]==1) 52 printf("000%d",a[i]); 53 if(d[i]==2) 54 printf("00%d",a[i]); 55 if(d[i]==3) 56 printf("0%d",a[i]); 57 if(d[i]==4) 58 printf("%d",a[i]); 59 } 60 if(i!=0) 61 { 62 if(d[a[0]]==3) 63 printf("%d",a[i]/1000); 64 if(d[a[0]]==2) 65 printf("%d",a[i]/100); 66 if(d[a[0]]==1) 67 printf("%d",a[i]/10); 68 } 69 return 0; 70 }
一个数分成的数乘积最大 要尽量分3,数据范围要求要用高精压位。
以上是关于bzoj 1263: [SCOI2006]整数划分的主要内容,如果未能解决你的问题,请参考以下文章