[bzoj1263]整数划分

观察样例,令f(n)表示n拆分的答案,猜想$f(n)=3f(n-3)$,当$n\le 4$时$f(n)=n$
取3的原因是因为对于给定的$x+y$,当$4<x+y$,显然有$3^{x+y-3}$最大,否则直接取$x+y$即为最大值,也就是给出的递推式

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define P 10
 4 int n,ans[10005];
 5 void cheng(int k){
 6     ans[1]*=k;
 7     for(int i=2;i<=ans[0];i++){
 8         ans[i]=ans[i]*k+ans[i-1]/P;
 9         ans[i-1]%=P;
10     }
11     if (ans[ans[0]]>=P){
12         ans[ans[0]+1]=ans[ans[0]]/P;
13         ans[ans[0]++]%=P;
14     }
15 }
16 int main(){
17     scanf("%d",&n);
18     ans[0]=ans[1]=1;
19     while (n>4){
20         n-=3;
21         cheng(3);
22     }
23     cheng(n);
24     printf("%d\n",ans[0]);
25     for(int i=ans[0];i>max(ans[0]-100,0);i--)printf("%d",ans[i]);
26 }
View Code

 

posted @ 2019-11-11 17:54  PYWBKTDA  阅读(133)  评论(0编辑  收藏  举报