codevs 2612 最有分解方案 (贪心)
2016-06-01 22:00
218 查看
/* 数字不重复 将一个正整数分解成若干的整数的和 数字不重复 且数字不相同 保证不重复的话 贪心策略是从2开始分 然后把最后剩下的数均匀分到后面 证明嘛 这里写的可能不是很严谨 对于一个n 如果我们先分解成了两个a1 a2 我们设 x为a2-a1 若x>=3显然我们把x拿出来 即变成 x a1 a2-x 这样会更优 然后我们要保证不重复 从2开始拆 每次+1 把剩下的给后面的每个+1 这样一定不会重复 而且满足我们刚才的最优策略 然后写个高精乘单精 */ #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; }
相关文章推荐
- __block 与 __weak的区别理解
- 汇率转换(java界面设计程序)
- HttpClient使用详解
- 剑指offer-27二叉搜索树与双向链表
- SQL语句语法
- 树莓派1代·添加一个linux系统调用·编译内核
- STM32F0xx_TIM输入捕获(计算频率)配置详细过程
- 第7次c++实验
- UITableView的分割线长短的控制
- HttpURLConnection用法详解
- 共同学习SpringMVC源码--DispatcherServlet(二)
- HashTable vs HashMap
- Java中运用数组的四种排序方法
- HttpUtils 的post请求
- 网络知识
- Android 显示gif动画
- 深度学习第三次课-梯度下降与反向传播
- HttpUtils解析XMl
- ios::ate和ios::app在C++文件中的区别
- Class中的容器问题