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]整数划分的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1263 [SCOI2006]整数划分 高精度

Bzoj-1263[SCOI2006]整数划分

[bzoj1263]整数划分

BZOJ 1263 整数划分(数学+高精度)

Codeforces 986D Perfect Encoding FFT 分治 高精度

(A - 整数划分 HYSBZ - 1263)(数组模拟大数乘法)