码迷,mamicode.com
首页 > 其他好文 > 详细

codevs 2612 最有分解方案 (贪心)

时间:2016-06-01 23:03:20      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

/*
数字不重复 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 2600
using namespace std;
int n,ans[maxn],l,p[maxn];
void Mul(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]/10;
          ans[i]=ans[i]%10;
        }
    while(ans[l+1])
      {
          l++;
          ans[l+1]+=ans[l]/10;
        ans[l]=ans[l]%10;
      }
}
int main()
{
    scanf("%d",&n);
    int i,k,s=0;
    for(i=2;i;i++)
      {
          if(n-i<0)break;
          n=n-i;p[++s]=i;
      }
    k=n;
    while(k)
      for(int i=s;i>=1;i--)
        if(k)
          {
            p[i]++;k--;
          }
    ans[1]=1;
    l=1;
    for(int i=1;i<=s;i++)
      Mul(p[i]);
    for(int i=l;i>=1;i--)
      printf("%d",ans[i]);
    return 0;
}
/*
数字可以重复的 
*/
#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];
}

 

codevs 2612 最有分解方案 (贪心)

标签:

原文地址:http://www.cnblogs.com/yanlifneg/p/5551249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!