首页 > 其他 > 详细

[bzoj1263]整数划分

时间:2019-11-11 19:13:52      阅读:85      评论:0      收藏:0      [点我收藏+]

观察样例,令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

 

[bzoj1263]整数划分

原文:https://www.cnblogs.com/PYWBKTDA/p/11837180.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!