博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2229 Sumsets(递推,找规律)
阅读量:5790 次
发布时间:2019-06-18

本文共 883 字,大约阅读时间需要 2 分钟。

构造,递推,因为划分是合并的逆过程,考虑怎么合并。

先把N展开成全部为N个1

然后合并,因为和顺序无关,所以只和出现次数有关
情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方案数

树形表示合并 (UVA 10562 Undraw the Trees的表示方法。。。

7          (2^0) (7表示2^0出现的次数)
_ _ _
|  |  |
1 2 3    (2^1) (7个1可以合并成1~3个2)

   _ _

   |  |
   1 1         (2^2) (继续合并)
这棵树是分形的,子树的形态由根结点的值决定。

f[n]表示方案

当n是偶数,第一层会增加一颗子树 其值为 n/2, f[n] = f[n-1]+f[n/2] 

当n是奇数,树的形态不变 ,f[n] = f[n-1]

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int mod = 1e9, maxn = 1e6+1;int dp[maxn];//#define LOCALint main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif int n; cin>>n; dp[1] = 1; for(int i = 2; i <= n ; i++) { dp[i] = dp[i-1] + (i&1?0:dp[i>>1]); if(dp[i]>=mod) dp[i] -= mod; } cout<
<

 

转载于:https://www.cnblogs.com/jerryRey/p/4887229.html

你可能感兴趣的文章
UVa 11292 勇者斗恶龙(The Dragon of Loowater)
查看>>
线程退出时执行函数,处理资源
查看>>
java中关于时间的格式化
查看>>
Wine QQ2012 笔记
查看>>
qml demo分析(clocks-时钟)
查看>>
vue去掉#——History模式
查看>>
2018年7月第一周网站建站笔记
查看>>
MongoDB工具MagicMongoDBTool使用介绍(一) -- 简单MongoDB入门
查看>>
javascript的事件
查看>>
201521123009 《Java程序设计》第1周学习总结
查看>>
年终述职--常见问题分析解答
查看>>
C#_细说Cookie_Json Helper_Cookies封装
查看>>
在mui中创建aJax来请求数据..并展示在页面上
查看>>
spring 之AOP
查看>>
总结 15/4/23
查看>>
Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载
查看>>
C#常见错误解决方法
查看>>
安装cnpm (npm淘宝镜像)
查看>>
Java 面向对象(基础) 知识点总结I
查看>>
读书笔记《自控力》
查看>>