POJ2229 Sumsets
来源:互联网 发布:网络综艺节目评价 编辑:程序博客网 时间:2024/05/18 11:23
题目描述
给定一个数N (1 <= N <= 1,000,000),将其分解为若干个2的幂次方数。问其有几种分解方式。
样例
输入
7
输出
6
样例解释
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+2+2
7=1+1+1+4
7=1+2+2+2
7=1+2+4
解题思路
仔细分析以后不难发现,如果n是奇数(不是1),那么它其实和n-1的情况个数是一样的(无非是在每种情况最后加了一个1)。所以我们只需要分析所有偶数个的情况就可以了。我们可以把某个偶数 分成两种情况讨论:
A.分解式中有1出现。不难看出,这时必须有2个1一直放在那里不动。那么这种情况的数量不就和n-2的情况的数量相等吗?(仔细想)
B.分解式中没有1出现。这时所有分解数都是偶数。那么把他们都除以2好了!你会发现…………居然就成了n/2的情况!!
到这里就显然了……递推。 详见代码。
#include <cstdio>const int maxn = 1000010;int ans[maxn];int main(){ ans[1] = 1; ans[2] = 2; for(int i = 3 ; i < maxn ; i ++){ if(i%2){//奇数 ans[i] = ans[i-1]; }else{//偶数 ans[i] = ans[i-2] + ans[i/2]; } } int n; scanf("%d",&n); printf("%d\n",ans[n]); return 0;}
0 0
- poj2229 Sumsets
- poj2229 Sumsets
- POJ2229 Sumsets
- POJ2229 Sumsets
- POJ2229 Sumsets
- POJ2229--Sumsets
- 【poj2229】Sumsets
- POJ2229-Sumsets
- POJ2229 Sumsets
- sumsets(poj2229)
- POJ2229 Sumsets
- POJ2229 Sumsets
- POJ2229 Sumsets 动态规划
- POJ2229 Sumsets 【递推】
- [dp]poj2229 Sumsets
- POJ2229 Sumsets(DP)
- POJ2229-Sumsets-完全背包
- poj2229 Sumsets(dp)
- IOS线程的使用 performSelectorOnMainThread
- 小马哥----高仿华为MATE 华为定制版 6582芯片4.3.4系统 详细拆机图与开机识别图
- 经济学人:“谷歌们”的垄断是否该被打破?
- 单链表进阶——编写一个约瑟夫环
- 使用Eclipse构建Maven项目 (step-by-step)
- POJ2229 Sumsets
- 美团外卖网被罚2.8万元:因平台商户无证经营
- svn 使用笔记
- Android PopupWindow设置
- 解码速度
- 震惊了!130万研究生报名用户的数据遭泄露
- Linux Sed 命令
- 一张图看懂硅谷科技公司的男女比例
- 2014/11 cocos2d-x Android 环境搭建需要的资源名称列表