BZOJ3612 [Heoi2014]平衡 整数划分】的更多相关文章

[Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 348  Solved: 273[Submit][Status][Discuss] Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线, 第 n + 1 条 刻…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 看了好久才弄清楚题意... 原来整数划分就是这样的啊:https://blog.csdn.net/Vmurder/article/details/42551603 这种想法很经典呢,值得借鉴:直接减去不合法状态的那个地方真强啊. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 因为力矩的缘故,变成了整数划分. 学习到了整数划分.就是那个图一样的套路.https://blog.csdn.net/Vmurder/article/details/42551603 注意各种边界. 注意输出换行. #include<iostream> #include<cstdio> #include<cstring> using namespace st…
下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线,第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合. 露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面).于是,她又在尺子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n + 1 条刻度线上都恰有一块相同质 量的橡皮.“跷…
Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线, 第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合.      露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面).于是,她又在尺 子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n…
首先不可重的整数规划是fi,j=fi-1,j-i+fi,j-i的 然后现在加了一个限制,分成的数不能超过n,那么对于拼大于n的数的时候多减一个fi-1,j-n-1 接下来是优化代码暴露我自带巨大常数的时候了 拿着两份代码看来看去蒙蔽了,为啥我要跑10s人家2s就完事了... //memset(f,0,sizeof(f)); .................... #include<cstdio> #include<iostream> #include<cstring>…
其实就是-n~n中求选k个不同的数,和为0的方案数 学到了新姿势叫整数划分,具体实现是dp 详见:https://blog.csdn.net/Vmurder/article/details/42551603 设f[i][j]为j个数和为i的方案数,然后因为互不相同,所以转移的话有两种,就是当前j个数全部+1,和当前j个数全部+1并且多填一个1出来,也就是f[i][j]=f[i-j][j]+f[i-j][j-1] 但是这里要求选的数不能超过n,我们考虑i>n的f中一定有一个大于n的数,我们把这种情…
枚举Fl, 就变成一个整数划分的问题了...f(i,j) = f(i-j,j-1)+f(i-j,j)-f(i-N-1,j-1)递推.f(i,j)表示数i由j个不同的数组成,且最大不超过N的方案数 -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using n…
[HEOI2014]平衡 转化为求选择k个数,和为(n+1)*k的方案数 保证,每个数[1,2*n+1]且最多选择一次. 限制k个很小,所以用整数划分的第二种方法 f[i][j],用了i个,和为j 整体+1,或者取一个1再整体加1(为了保证只选择一次) j>=2*n+2时,整体+1,所以必然存在一个选择了2*n+2的方案,减掉f[i-1][j-(2*n+2)]即可 #include<bits/stdc++.h> #define reg register int #define il in…
友情提醒:取模太多真的会TLE!!! P4104 [HEOI2014]平衡 题解 本题属于 DP-整数划分 类问题中的 把整数 n 划分成 k 个不相同不大于 m 的正整数问题 设置DP状态  f[ i ][ j ] 把整数 i 划分为 j 个不相同不大于 m 的正整数的方案数 边界条件 f[0][0]=1 ,把 0 划分成 0 个正整数的方案是 1 ,就不管它不划分它就好了 [注释1] 下面看转移: 考虑 i 最大可以到多少??? ----- n*k 我们就把它划成  k 个 n 就好啦 转移…