博客
关于我
POJ 2229 Sumsets(递推,找规律)
阅读量:793 次
发布时间:2023-03-03

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

构造递推关系,因为划分是合并的逆过程,需要考虑如何合并。将N展开成全部由1组成的N个1,然后合并。由于合并顺序无关,只与出现次数有关,因此需要进行分类。

设C[i]表示序列中最大的数为2^i时的方案数。通过树形结构可以表示合并过程。例如,7表示2^0出现的次数。树的结构是分形的,子树的形态由根结点的值决定。

当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
using namespace std; const int mod = 1e9, maxn = 1e6 + 1; int dp[maxn]; #define LOCAL int 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]; if (i > 1) { dp[i] += dp[i / 2]; } if (dp[i] >= mod) { dp[i] -= mod; } } cout << dp[n]; }

以上代码实现了递推关系的计算,返回了最终的dp[n]值。

转载地址:http://fyxfk.baihongyu.com/

你可能感兴趣的文章
PL/SQL 存储函数和过程
查看>>
query简单入门到精通细节 - (六)Jquery效果之“淡入与淡出”
查看>>
PL/SQL提示“ORA-01722:无效数字,将无效数字查找出来
查看>>
PL/sql语法单元
查看>>
PL/SQL连接远程服务器数据库,出现ORA-12154: TNS: 无法解析指定的连接标识符。
查看>>
pl/sql锁
查看>>
PL2303 Windows 10 驱动项目常见问题解决方案
查看>>
QueryPerformanceCounter与QueryPerformanceFrequency
查看>>
Plaid.com的监控系统如何实现与9600多家金融机构的集成
查看>>
Plain Stock Prediction:基于RNN的股票价格预测工具
查看>>
platform_driver与file_operations两种方法开发led驱动
查看>>
PlatON共识方案详解:应用CBFT共识协议,提高共识效率
查看>>
QueryDict和模型表知识补充
查看>>
Querybase 使用与安装教程
查看>>
Playwright与Selenium的对比:谁是更适合你的自动化测试工具?
查看>>
quarz设置定时器任务的有效时间段_定时器?你知道有几种实现方式吗?
查看>>
PLC、DCS、SCADA的选型
查看>>
PLC中的电子凸轮的简单介绍
查看>>
PLC发展详解-ChatGPT4o作答+匹尔西
查看>>
PLC探针有什么用
查看>>