poj2229
很不错的一道题,这里提供两种方法:
方法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的更多相关文章
- 子集和问题(应用--换零钱)POJ2229:Sumsets
我一直在纠结换零钱这一类型的题目,今天好好絮叨一下,可以说他是背包的应用,也可以说他是单纯的dp.暂且称他为dp吧. 先上一道模板题目. sdut2777: 小P的故事——神奇的换零钱 题目描述 已知 ...
- POJ-2229 Sumsets---完全背包变形
题目链接: https://vjudge.net/problem/POJ-2229 题目大意: 给定一个N,只允许使用2的幂次数,问有多少种不同的方案组成N. 思路: 处理出2的幂次方的所有的数字,当 ...
- [USACO2005][poj2229]Sumsets(递推)
http://poj.org/problem?id=2229 分析: 显然的递推 若n为奇数,那么肯定是在n-1的基础上前面每个数+1,即f[n]=f[n-1] 若n为偶数 当第一位数字是1的时候,等 ...
- POJ2229 - Sumsets(完全背包)
题目大意 给定一个数N,问由不同的2的幂之和能组成N的方法有多少种 题解 看完题目立马想到完全背包...敲完代码上去超时了....后来发现是%的原因...改成减法就A了...%也太他妈耗时了吧!!!( ...
- POJ2229 Sumsets 【递归】
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 13210 Accepted: 5300 Descrip ...
- poj2229 Sumsets (递推)
http://poj.org/problem?id=2229 看到题目能感觉到多半是动态规划,但是没有清晰的思路. 打表找规律: #include<cstdio> #include< ...
- POJ2229 Sumsets
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 19024 Accepted: 7431 Descrip ...
- 【动态规划】POJ-2229
一.题目 Description Farmer John commanded his cows to search for different sets of numbers that sum to ...
- POJ-2229
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 19599 Accepted: 7651 Descrip ...
随机推荐
- EXTJS 4.2 资料 控件之Window窗体自动填充页面
1.html页面代码: <div id="component" style="width:100%;height:100%"> <body&g ...
- Spring Aop实例之xml配置
AOP的配置方式有2种方式:xml配置和AspectJ注解方式.今天我们就来实践一下xml配置方式. 我采用的jdk代理,所以首先将接口和实现类代码附上 package com.tgb.aop; pu ...
- 关于搭建Android环境的时候遇到 'could not find adb.exe!'的问题
关于'could not find adb.exe'的问题 问题原因: 文件所处位置和Android_home变量指路径不一致 文件路径: 解决方法: 直接将相关文件退拽至变量值的路径下即可 小结:a ...
- Raft、Zab
Raft.Zab 引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议--Raft和Zab.通过与Paxos对比,了解Raft和Z ...
- 关于WinForm引用WPF窗体
项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...
- js的原型链
js中的原型链是一个很重要的概念,理解了原型链,对js程序的开发有很大的好处,废话不说,先上图: javascript是基于原型的语言,所以一个对象可以另一个对象继承.不过javascript实现的时 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- Chp3: Stacks and Queue
1. 说明如何用两个队列来实现一个栈,并分析有关栈操作的运行时间. 解法:1.有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作.2.现在要做pop操作,即要得到c,这时可以将 ...
- 利用link标签rel="alternate stylesheet"属性实现界面动态换肤
rel="stylesheet"属性指定将一个样式表立即应用到文档.rel="alternate stylesheet"属性将其作为备用样式表而在默认情况下禁用 ...
- JavaScript 三种创建对象的方法
JavaScript中对象的创建有以下几种方式: (1)使用内置对象 (2)使用JSON符号 (3)自定义对象构造 一.使用内置对象 JavaScript可用的内置对象可分为两种: 1,JavaScr ...