bzoj2660】的更多相关文章

题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 我们可以把它的分解某一项拆分 设dp[i][1/0]表示 对于最少拆分成的第i项斐波那切数拆不拆 在上一项j与这一项i的斐波那契数之间拆i项共有(i-j)/2种拆分方法, 转移方程就有了 代码 /* 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的…
dp 看了挺长时间的,这篇写的很好:http://97littleleaf11.xyz/oi/bzoj-2660/ 我们先把n按照斐波那契数列贪心分解,然后发现可以把现在组合的斐波那契数分解成两个较小的,具体看博客,然后就是dp转移,上面的博客图画的很清楚了,转移就很方便 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std;…
http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那契进制的形式,第i位表示有没有第i个斐波那契数 比如16=13+3     001001 那么拆分一个数就是把一个1变成0,左边的两个0变成1 前面的1不影响后面 后面1拆出的两个1不能拆到前面1的前面 所以b[i] 表示n的第i个1是第几项斐波那契数 所以dp[i][0/1] 表示b中的i所在位(…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 当然可以看出  选了第 i 个斐波那契数<=>选了第 i - 1 和第 i - 2 个斐波那契数: 还有一个关键是:题目给出的这个数能表示成几个斐波那契数的和<=>该数可以被用斐波那契数分解. 如果把选不选每一个斐波那契数用二进制表示的话,首先要尽量使最高位最大,才能算出最多的方案. 把第一次分解的那些斐波那契数的位置记录下来,用dp表示这些数选不选. 若选这个数,则上…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 首先,多种方案的出现是因为一个较大的斐波那契数可以变成两个较小的: 用一个01串来表示这个数的斐波那契数情况,1表示有这个斐波那契数,0表示没有: 所以首先尽量把这个数往大的斐波那契数来分,作为DP的初始状态: 记录一个数组p,表示每个斐波那契数在这个01串里的位置: 考虑对于一个数选或不选:若选则没有什么影响,把之前的状态加起来即可: 若不选,则考虑它往前拆,还需看看前一个斐波那契…