POJ1032 Parliament(数论)
You are to write a program that will determine how many delegates should contain each group in order for Parliament to work as long as possible.
Input
Output
Sample Input
- 7
Sample Output
- 3 4
- 这道题就是将n分成若干个不同的正整数的和,使其相乘最大,求分成哪几个数。
- 题解:就是将n分成2,3,......,直到不能分为止,然后怎么办呢,剩下的就倒着分配回去,这样乘积最大。
- 转一下:http://www.cnblogs.com/Missa/archive/2012/10/11/2719943.html
给你一个n问求使得 a1+a2+..ak==n时 a1*a2*..ak最大。。a1 a2.....不相等。(没看懂题目意思。。)
以下转自http://blog.himdd.com/?p=1918
思路:将一个数分成2份,如何分,使得这两个数乘积最大。答案是将这个数平分,证明是求x*(n-x)的最大值。基于这种思路,将N分成乘积最大的不相等的多份,应使得其中每份的数相差尽量少,即差值为1的等差数列为最理想状态。构造了一个等差数列以后,再根据剩余值对整个数列的值进行调整。使得相邻元素差值达到最小。这里注意,等差数列的构造应以2为首项,1为首项的话,对乘积没影响。。。
(以下证明是从网上得来的)
由题意知,这种分解的数目是有限的,因此,最大积存在;
假设最大积的分解为:
N=a1+a2+a3+…+a[t-2]+a[t-1]+a[t] (t是分解的数目,a1<a2<a3<...<a[t-2]<a[t-1]<a[t])
下面是该数列的性质及其证明:
1)a1>1;
如果a1=1,则a1和a[t]可以由a[t]+a1=a[t]+1来替代,从而得到更大的积;
2)对于所有的i,有a[i+1]-a[i]<= 2;
如果存在i使得a[i+1]-a[i]>=3,则a[i]和a[i+1]可以替换为a[i]+1,a[i+1]-1,从而使乘积更大;
3)最多只存在一个i使得a[i+1]-a[i]=2;
如果i< j且a[i+1]-a[i]=2、a[j+1]-a[j]=2,则a[i],a[j+1]可以替换为a[i]+1,a[j+1]-1,从而使得乘积更大;
4)a1<=3;
如果a1>=4,则a1和a2可以替换为2,a1-1,a2-1,从而使得乘积更大;
5)如果a1=3且存在i满足a[i+1]-a[i]=2,则i一定等于t-1;
如果i<t-1,则a[i+2]可以替换为2,a[i+2]-2,从而使得乘积更大;< p="">
将上面5条性质综合一下,得到该数列满足:
1)1< a1< 4
2)a[i+1]-a[i] <=2(该序列按升序排序)
3)a[i+1]-a[i]=2的情况最多只有一个
因此,我们得到最大的乘积的做法就是求出从2开始的最大连续(由上面总结的性质2和3可知)自然数列之和A,使得A的值不超过N,具体分析如下:
对输入的N,找到k满足:
A=2+3+4+...+(k-1)+k <= N < A+(k+1) = B
假设N=A+p(0<=p< k+1),即A+p是最大积的数列
1)p=0,则最大积是A;
2)1<=p<=k-1,则最大积是B-{k+1-p},即从数列的最大项i开始,从大到小依次每项加1,知道p=0为止;
3)p=k,则最大积是A+p=A+k=A-{2}+{k+2};( =3+4+...+k+( k+2) );
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- int n;
- int a[],top=;
- int main()
- {
- scanf("%d",&n);
- int st=;
- while (n>=st)
- {
- a[++top]=st;
- n-=st;
- st++;
- }
- for (int i=top;i>=top-n+;i--)
- a[i]++;
- if (n>top) a[top]++;
- for (int i=;i<=top-;i++)
- printf("%d ",a[i]);
- printf("%d\n",a[top]);
- }
POJ1032 Parliament(数论)的更多相关文章
- POJ1032 Parliament
题目来源:http://poj.org/problem?id=1032 题目大意:给定一个正整数N(5<=N<=1000),将N拆为若干个不同的数使得它们的乘积最大(找到一组互不相等,和为 ...
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)
~>>_<<~ 咳咳!!!今天写此笔记,以防他日老年痴呆后不会解方程了!!! Begin ! ~1~, 首先呢,就看到了一个 gcd(a,b),这是什么鬼玩意呢?什么鬼玩意并不 ...
- hdu 1299 Diophantus of Alexandria (数论)
Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)
4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 290 Solved: 148[Submit][Status ...
- bzoj2219: 数论之神
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- hdu5072 Coprime (2014鞍山区域赛C题)(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
随机推荐
- 微信小程序实例--仿豆瓣电影
最近不想写论文,就想捣鼓点新东西吧,就边看官方文档,花了3天时间写了一个简单的仿豆瓣电影的微信小程序,给大家分享一下教程吧. 源码&效果图 源码点击这里,欢迎star 运行方法: 下载微信we ...
- jdbc hibernate myBatis比较
jdbc hibernate myBatis比较 jdbc 优点:性能高,易掌握 缺点:代码繁琐 hibernate 优点:不用写sql,代码简洁 缺点:性能不好 自动生成的sql效率低下(复杂业务) ...
- union-find算法Java实现
package practice; /*在一个全是点的图中,循环选择两点连通,之后判断两点是否在同一通路*/ public class Testmain { public static void ma ...
- 认识大明星——轻量级容器docker知识树点亮
docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性. 传统虚拟化架构: docker虚拟化架构: 可以看出,docker是没有Guest ...
- spring 整合Mybatis 《报错集合,总结更新》
错误:java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldExcepti ...
- [译] 反思 1 号进程 / Rethinking PID 1
By Lennart Poettering 译 SReadFox 原文链接:http://0pointer.de/blog/projects/systemd.html 译注:笔者大约在 2011 年读 ...
- JavaScript学习日志(二):面向对象的程序设计
1,ECMAScript不像其他面向对象的语言那样有类的概念,它的对象与其他不同. 2,ECMAScript有两种属性:数据属性和访问器属性.([[]]这种双中括号表示属性为内部属性,外部不可直接访问 ...
- Project 6:上楼梯问题
问题简述:梯有N阶,上楼可以一步上一阶,也可以一步上二阶.编写一个程序,计算共有多少中不同的走法. 样例输入: 5 样例输出: 8 #include <stdio.h> int count ...
- Android studio 一些技术添加依赖,依赖库
Recyclerview compile 'com.android.support:recyclerview-v7:21.0.+' butterKnife 的依赖compile 'com.jakewh ...
- SwaggerUI笔记
关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...