syhd142  
日历
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
统计
  • 随笔 - 23
  • 文章 - 122
  • 评论 - 31
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔档案(23)

文章分类(270)

文章档案(122)

我的豆瓣

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
还是老贺猛啊,我看到了我们学校夺金的希望。这题问了他之后他给出了我证明。
题意:给定你一个数N,要求拆分成一系列数之和,要求这些数之积越大越好。
解法:贪心。显然数被分成越多,它们之积就越大,这个不证明了。这样我们从2开始拆分n,一直到k,令Sum = 2+3+……+k,
则有n-sum<=k,这样我们还得把剩下的n-sum个数分配出去,怎么分配呢?因为不能存在相同的数,所以从后往前分配,对k,……,3,2依次加1,
因为前面只有k-1个数,而剩余的可能有k个,这样前面每个数分配都加1之后还有多,怎么办,接着k开始加,这样就OK了。数越平均,积就越大。
#include <stdio.h>

#define N 105

int a[N];

int main()
{
    
int t, n, top;
    scanf(
"%d"&t);
    
while(t--)
    {
        scanf(
"%d"&n);
        top 
= 0;
        
for(int i = 2; n >= i; i++)
        {
            a[
++top] = i;
            n 
-= i;
        }
        
for(int i = top; n && i; i--)
        {
            a[i]
++;
            n
--;
        }
        a[top] 
+= n;
        
for(int i = 1; i < top; i++)
        {
            printf(
"%d ", a[i]);
        }
        printf(
"%d\n", a[top]);
        
if(t) printf("\n");
    }
    
return 0;
}
posted on 2010-09-26 18:34 Fucker 阅读(297) 评论(0)  编辑 收藏 引用 所属分类: ACM/ICPC贪心

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Fucker Powered by: 博客园 模板提供:沪江博客