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;
}


posted @ 2016-10-16 20:05  see_you_later  阅读(125)  评论(0编辑  收藏  举报