URAL1222
题意:
把n拆分成几个数,把这些数乘起来最大。
思路:
3越多越好。
对4,5特判一下,4的时候是2*2大,5的时候还剩个2,那么就是n%3=1的话,我们先拿个4,n%3==2的话就是先拿个2,后面把有多少个3乘起来就好了;
#include <cstdio> #include <iostream> using namespace std; #define maxn 3022 int n, step; int ans[maxn]; int main() { scanf("%d", &n); if(n==1) { printf("1\n"); return 0; } int num=1; if(n%3==0){ ans[1]=1; } if(n%3==1){ ans[1]=4; n-=4; } if(n%3==2){ ans[1]=2; n-=2; } step=n/3; for(int i=1;i<=step;++i) { for(int j=1;j<=num;++j) ans[j]*=3; for(int j=1;j<=num+1;++j) { ans[j+1]+=ans[j]/10; ans[j]%=10; } int k=num; while(ans[k+1]!=0) ++k; num=k; } for(int i=num;i>=1;--i) printf("%d",ans[i]); printf("\n"); return 0; }