1308 乘积最大 2

/*
数字可以重复
显然想要最优的话是没有1的 
我们列举几个看看规律
5-> 2*3   6-> 3*3   7-> 2*2*3   8-> 2*3*3   9-> 3*3*3   
10的话我们分解成2个5 也就是2*2*3*3 
也就是说若ai>=5我们就分成x*2+y*3 
        若ai==4我们就分成2*2
剩下的就不用分了 这样的话我们就把n分成了 x*2+y*3 且3越多越大 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans[100001],l;
void Che(int x)
{
    for(int i=1;i<=l;i++)
      ans[i]=ans[i]*x;
    for(int i=1;i<=l;i++)
      if(ans[i]>9)
        {
          ans[i+1]=ans[i+1]+ans[i]/10;
          ans[i]=ans[i]%10;
        }
    if(ans[l+1]>0)l++;
}
int main()
{
    cin>>n;
    ans[1]=1;
    l=1;
    while(n>=5)
      {
          n=n-3;
        Che(3);
      }
    Che(n);
    cout<<l<<endl;
    if(l>100)
      for(int i=l;i>l-100;i--)cout<<ans[i];
    else for(int i=l;i>=1;i--)
      cout<<ans[i];
}

 

posted @ 2016-06-02 16:37  一入OI深似海  阅读(202)  评论(0编辑  收藏  举报