PKU 1032 Parliament

本文提供了一道编程题目(PKU 1032)的解题思路与代码实现。该题旨在寻找一个序列{ak}
Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time
6696511kingpro1032Accepted240K0MSC++283B2010-04-06 20:55:40

 

 


  
1 #include < iostream >
2   using namespace std;
3   int main()
4 {
5 int N = 0 , n = 0 , ss = 5 ; cin >> N;
6 for (n = 4 ; (ss += n) <= N; n ++ );
7 for ( int leave = N - ss + 2 , p = (leave >= 0 ? 1 : 0 ), q = leave + (leave >= 0 ? 0 : n - 2 ), sep = p + n - q - 1 , x = n + p, i = 2 + p; i < x && (cout << (i > sep ? i + 1 : i) << " " , true ); i ++ );
8 return 0 ;
9 }

 

引用某博客:

最大的困难是读题,罗嗦了一大堆,其实就是一道找对于序列{ak},满足各元素互不相同,和为n,且该序列各项乘积最大.
容易得出满足条件序列的几个性质:
1.4>a1>1
2.a[i+1]-a[i]<=2(假设该序列按升序排列)
3.a[i+1]-a[2]=2的情况最多有1个
具体证明略.
由此可以轻松构造出该序列:
1.从2开始累加,直到和m大于等于n
2.j=m-n,把序列中的j划去(当j=1时,划去2并将最后一个元素加1)

 

说实话题目我也没有看懂...

只能看了别人的解题报告 自己实现下...郁闷

 

转载于:https://www.cnblogs.com/Kingpro/archive/2010/04/06/PKU_1032_Parliament.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值