BZOJ 1263 SCOI2006 整数划分 高精度
来源:互联网 发布:云数据加密传输运营商 编辑:程序博客网 时间:2024/06/06 03:01
题目大意:给定一个数n,要求将n划分成一些正整数的和,使这些正整数的乘积最大
结论:
如果n是3的倍数 那么将n划分成n/3个3是最优的
如果n是3的倍数+1 那么将n划分成(n-4)/3个3和两个2是最优的
如果n是3的倍数+2 那么将n划分成(n-2)/3个3和1个2是最优的
证明是有的
考虑不是划分成整数,而是划分成任意实数
设我们将n划分成了x个正实数之和
易知当这x个数相等时答案是最优的
那么每个数都是n/x,答案是(n/x)^x
设y=(n/x)^x
则有lny=x[ln(n)-ln(x)]
两侧求导可得y'=(n/x)^x * ( ln(n) - ln(x) - 1 )
当x=n/e时y‘取0 此时乘积最大
因此每个数要尽量靠近e才能使答案最大
现在考虑整数 离e最近的整数是3 因此要把n尽量分成3 不足的用2补齐 这样可以保证是最优的。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 5050using namespace std;struct Int{int xx[M],cnt;Int(int x){xx[cnt=1]=x;}void operator *= (int x){int i;for(i=1;i<=cnt;i++)xx[i]*=x;for(i=1;i<=cnt;i++)xx[i+1]+=xx[i]/10,xx[i]%=10;if(xx[cnt+1]) ++cnt;}}ans(1);int n;int main(){int i;cin>>n;switch(n%3){case 0:for(i=3;i<=n;i+=3)ans*=3;break;case 1:for(i=7;i<=n;i+=3)ans*=3;ans*=4;break;case 2:for(i=5;i<=n;i+=3)ans*=3;ans*=2;break;}cout<<ans.cnt<<endl;for(i=ans.cnt;i&&i>ans.cnt-100;i--)printf("%d",ans.xx[i]);return puts(""),0;}
0 0
- BZOJ 1263 SCOI2006 整数划分 高精度
- BZOJ 1263: [SCOI2006]整数划分 数学,高精度
- BZOJ 1263 [SCOI2006]整数划分
- bzoj 1263: [SCOI2006]整数划分
- 1263: [SCOI2006]整数划分
- 1263: [SCOI2006]整数划分
- 【BZOJ1263】【SCOI2006】整数划分 高精度+构造
- 【bzoj1263】【scoi2006】【整数划分】【高精度+贪心】
- BZOJ 1263 SCOI 2006 整数划分 高精度
- 【杂谈】[scoi2006]整数划分
- [BZOJ1263][SCOI2006]整数划分
- 【SCOI2006】【bzoj1263】整数划分
- SCOI2006 整数划分
- BZOJ1263: [SCOI2006]整数划分
- bzoj1263: [SCOI2006]整数划分
- bzoj1263 [SCOI2006]整数划分
- 【SCOI2006】【bzoj1263】整数划分
- bzoj 3612: [Heoi2014]平衡 整数划分
- Linux应用札记【三】—Unity桌面环境使用技巧点滴
- ESQL查询之简单的Oracle数据库查询测试
- 网络加载图片
- cortex_m3_stm32嵌入式学习笔记(二十三):红外遥控实验(输入捕捉+解码)
- .net利用Attribute简单实现AOP
- BZOJ 1263 SCOI2006 整数划分 高精度
- 学习stanford公开课 Developing iOS8 Apps with Swift 笔记(一)
- Android将应用log信息保存文件
- CF D. Fox And Jumping
- 功率谱密度
- CF C.Guess Your Way Out!
- MBProgressHUD特效
- windows下 eclipse + adt + ndk整合(非cygwin)
- BZOJ 1263 SCOI 2006 整数划分 高精度