很不错的一道题,这里提供两种方法:

方法1:递推;

易知当n为奇数时,f[n]=f[n-1] (n-1的所有方案前面添1,并且没有新的方案);

重点是n为偶数的时候,则拆分方案中,要么有偶数个1,要么有没1;

当有偶数个1时,就相当于在n-1(奇数)的方案中添一个1,(每个奇数分解方案一定有奇数个1);

当没1时,那么参加分解每个数都是偶数,所以方案数=f[n/2];

根据加法原理可知f[n]=f[n-1]+f[n/2];

方法2:这题也可以转化为完全背包来做:

因为只能用2^k来分解,且不考虑顺序:

容易想到就是k个物品,每个物品重量是2^k,来填一个容积为n的背包;

所以,k=[logn]; 时间复杂度为O(nlogn); (完全背包问题见背包九讲)

虽然没有上一种方法时间复杂度优,但是体现了就看似是数学问题向背包问题转化的思路,(参见noip2012pj第三题)

 const ff=;
var f:array[..] of int64;
d:array[..] of longint;
i,j,n,k:longint;
begin
readln(n);
k:=trunc(ln(n)/ln());
d[]:=;
for i:= to k do
d[i]:=d[i-]*;
f[]:=;
for i:= to k do
begin
for j:=d[i] to n do
begin
f[j]:=(f[j-d[i]]+f[j]);
if f[j]>ff then f[j]:=f[j]-ff;
end;
end;
writeln(f[n] mod ff);
end.

poj2229的更多相关文章

  1. 子集和问题(应用--换零钱)POJ2229:Sumsets

    我一直在纠结换零钱这一类型的题目,今天好好絮叨一下,可以说他是背包的应用,也可以说他是单纯的dp.暂且称他为dp吧. 先上一道模板题目. sdut2777: 小P的故事——神奇的换零钱 题目描述 已知 ...

  2. POJ-2229 Sumsets---完全背包变形

    题目链接: https://vjudge.net/problem/POJ-2229 题目大意: 给定一个N,只允许使用2的幂次数,问有多少种不同的方案组成N. 思路: 处理出2的幂次方的所有的数字,当 ...

  3. [USACO2005][poj2229]Sumsets(递推)

    http://poj.org/problem?id=2229 分析: 显然的递推 若n为奇数,那么肯定是在n-1的基础上前面每个数+1,即f[n]=f[n-1] 若n为偶数 当第一位数字是1的时候,等 ...

  4. POJ2229 - Sumsets(完全背包)

    题目大意 给定一个数N,问由不同的2的幂之和能组成N的方法有多少种 题解 看完题目立马想到完全背包...敲完代码上去超时了....后来发现是%的原因...改成减法就A了...%也太他妈耗时了吧!!!( ...

  5. POJ2229 Sumsets 【递归】

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 13210   Accepted: 5300 Descrip ...

  6. poj2229 Sumsets (递推)

    http://poj.org/problem?id=2229 看到题目能感觉到多半是动态规划,但是没有清晰的思路. 打表找规律: #include<cstdio> #include< ...

  7. POJ2229 Sumsets

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 19024   Accepted: 7431 Descrip ...

  8. 【动态规划】POJ-2229

    一.题目 Description Farmer John commanded his cows to search for different sets of numbers that sum to ...

  9. POJ-2229

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 19599   Accepted: 7651 Descrip ...

随机推荐

  1. 在PHP中如何使用消息列队

    /** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ...

  2. Discuz x2.5 单页制作的教程

    首先,单页包括该单页的php文件和该单页的模板(.htm)文件,比如:host.php.host.htm 单页的php文件内容如下: <?php require './source/class/ ...

  3. Catalyst揭秘 Day8 Final 外部数据源和缓存系统

    Catalyst揭秘 Day8 Final 外部数据源和缓存系统 今天是Catalyst部分的收官,主要讲一些杂项内容. 外部数据源处理 什么叫外部数据源,是SparkSql自己支持的一些文件格式,以 ...

  4. hdu 4622 Reincarnation 字符串hash 模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有不超过1e5次的区间查询,输出每次查询区间中不同 ...

  5. zxing-master core编译

    1.下载 Maven: http://maven.apache.org/download.cgi 2.下载完以后,设一下系统变量:MAVE_HOME 3.Path中加入%MAVEN_HOME%\bin ...

  6. OFBiz进阶之HelloWorld(三)CRUD操作

    参考文档 https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Development+Guid ...

  7. 十五、mysql 分区之 分区管理

    1.mysql分区处理分区字段NULL值的方式 1.range分区null被当作最小值处理 2.list分区null值必须被枚举出来,否则将出错 3.hash/key分区 null值当作0处理 2.R ...

  8. 微软职位内部推荐-Principal Dev Manager for Windows Phone Shell

    微软近期Open的职位: Location: China, BeijingDivision: Operations System Group Engineering Group OverviewOSG ...

  9. python学习笔记8(表达式和语句)

    一.print 和 import 信息 >>> print 'age:',22 # 用逗号隔开打印多个表达式 age: 22 import somemodule # 从模块导入函数 ...

  10. 在工程中添加pch文件

    在Xcode6之前,新建一个工程的时候,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编 ...