BZOJ 3612: [Heoi2014]平衡】的更多相关文章

枚举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…
3612: [Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 283  Solved: 219[Submit][Status][Discuss] Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线, 第 n +…
题目: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…
其实就是-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的数,我们把这种情…
[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…
[Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 348  Solved: 273[Submit][Status][Discuss] Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线, 第 n + 1 条 刻…
友情提醒:取模太多真的会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 就好啦 转移…
3611: [Heoi2014]大工程 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 408  Solved: 190[Submit][Status][Discuss] Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道.  我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上.  在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径.  现在国家有很多个计划,每个计划都是这…
Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线, 第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合.      露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面).于是,她又在尺 子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n…
下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子有 2n + 1 条等距的刻度线,第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合. 露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面).于是,她又在尺子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n + 1 条刻度线上都恰有一块相同质 量的橡皮.“跷…
3609: [Heoi2014]人人尽说江南好 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 470  Solved: 336[Submit][Status][Discuss] Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.     在过去,人们是要边玩游戏边填词的,比如这首<菩萨蛮>就是当年韦庄在玩游戏时填 的:  …
放波建虚树的模板. 大概是用一个栈维护根节点到当前关键点的一条链,把其他深度大于lca的都弹出去. 每次做完记得复原. 还有sort的时候一定要加cmp!!! bzoj 3611 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define N 1000005 #define ll long long #define inf 0x3f3f3f3f using…
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 可以先把给出的东西排序成这样: -1 -1 -1 -1 -1  1 -1  1 -1 -1  1  1 1 -1 -1 1 -1  1 1  1 -1 1  1  1 就是后面看成低位.前面看成高位,1看成1.-1看成0的二进制的顺序. 发现把第1行和第2行相加再除以2,得到的就是与 x3 无关的…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 看了好久才弄清楚题意... 原来整数划分就是这样的啊:https://blog.csdn.net/Vmurder/article/details/42551603 这种想法很经典呢,值得借鉴:直接减去不合法状态的那个地方真强啊. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using…
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define M 2000009 #define inf 0x7ffffff #define ll long long using namespace std; ],deep[M],m,dfn[M],T,v[M]; int h[M],st[M],mn[M],mx[M],size[M],mx1,mi1,v1[M]…
题意: 给一棵树 每次选 k 个关键点,然后在它们两两之间 新建 C(k,2)条 新通道. 求: 1.这些新通道的代价和 2.这些新通道中代价最小的是多少 3.这些新通道中代价最大的是多少 分析:较常见的dp,详见代码 #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <cctype&g…
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3613 题解: 考虑前面的数越小答案越优秀,于是我们二分答案,判断时让前面的数达到所能达到的最小值,这样最优秀.. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; int n; ll g[maxn],p,c,d,a,b,l,r,ans; bool pan(ll x){ ll mx=-0x3f…
题意 题目链接 Sol 可以把题目转化为从\([1, 2n + 1]\)中选\(k\)个数,使其和为\((n+1)k\). 再转化一下:把\((n+1)k\)划分为\(k\)个数,满足每个数在范围在\([1, 2n + 1]\) 这时候就可以用整数划分的思路dp了(然鹅我还是想不出来..) 因为每个数互不相同,因此我们可以把每个阶段划分出来的数都看做不降的 设\(f[i][j]\)表示前\(i\)个数,和为\(j\)且满足条件的方案数. 我们考虑最小的数是否是\(1\) 若不是\(1\),则映射…
题目链接 要求的和.最大值.最小值好像都可以通过O(n)的树形DP做,总询问点数<=2n. 于是建虚树就可以了.具体DP见DP()函数,维护三个值sum[],mx[],mn[]. sum[]要开longlong!.. //108172kb 2564ms(又是Rank4...) #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc(…
传送门 这题......注意读题就行 刚开始读成了Ans = Σ{|A[j]-B[j]|}以为是道神题,结果是Ans = Max{|A[j]-B[j]|}. 嗯.......可以证明Ans = 最大的逆序对的差值得一半. 还是放个代码. /************************************************************** Problem: 3613 User: MiEcoku Language: C++ Result: Accepted Time:745…
题目: 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上. 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径. 现在国家有很多个计划,每个计划都是这样,我们选中了 k 个点,然后在它们两两之间 新建 C(k,2)条 新通道. 现在对于每个计划,我们想知道: 1.这些新通道的代价和 2.这些新通道中代价最小的是多少 3.这些新通道中代价最大的是多少 题解: 这道题貌似是虚树的板子题. 为了…
虚树第二题.... 同BZOJ2286 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #d…
二分答案w,然后判断的时候维护一个mx,扫描序列,先更新mx=max(mx,a[i]-w),然后如果a[i]+w<mx的话就是说这个位置即使升到极限并且前面降到极限也不能符合条件了 #include<iostream> #include<cstdio> using namespace std; const int N=5000005; int n,sa,sb,sc,sd,a[N],mod; int clc(int x) { return (((1ll*sa*x%mod*x%m…
首先不可重的整数规划是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>…
参考:https://blog.csdn.net/Izumi_Hanako/article/details/80189596 胜负和操作次数有关,先手胜为奇,所以先手期望奇数后手期望偶数,最后一定能达到m,m,m,...n%m的操作次数最大局面 然后看达到这个状态的操作数的奇偶性即可 #include<iostream> #include<cstdio> using namespace std; int t,n,m,a,b,ans; int main() { scanf("…
dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<iostream> using namespace std; ][],w[],sum[]; inline int read() { ,f = ;char ch = getchar(); ; + ch - '; return x * f…
DP 唉我还是too naive 这是个整数划分题…… 我想的DP方式是f[i][j][k]表示前 i 个数拼出 j 用了 k 个数的方案数…… 转移当然是比较直观…… 但是只能得30分QAQ 正确的DP姿势:http://blog.csdn.net/Vmurder/article/details/42551603 分析: 数据范围不大,我们可以写整数划分. f[i][j]表示将i划分成j个互不相同的正整数,且最大不超过n 的划分方案数. 这里说一下这道题的整数划分. 我们不妨先来反向思考一下.…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
写在前面的.. 要去WC了好开心的呢.. 但是之前荒废了好多时间呢.. 好吧从明天开始加紧训练,目标是:WC前bzoj300t..(现在是260呢..) 开始吧 来看看完成情况: 40/40 [2017.1.12] 比较荒废的一天.. 满脑子就是查成绩.. 考得好差没心情.. 真的是太影响了整天才做了2道题..(有道题想错了搞了一个下午加半个晚上还没搞出来,真的sb) 3195: [Jxoi2012]奇怪的道路 定义$f_{i,j,state}$表示在处理第$i$个位置,已经连了$j$条边,后面…
0/1背包 给出n个物品,每个物品有Vi的价值和Wi的费用,我们总共有m块钱,求最多能得到多少价值的物品. N<=10^3,m<=10^3 记录方案数?记录输出方案? 输出方案: 对每个dp[i][j]记录是由哪个状态转移过来的,然后从最后一直往前找,输出: 最优策略方案数:再定义一个数组f[i][j]=dp[i-1][j]>dp[i-1][j-w[i]]+v[i]?f[i-1][j]:f[i-1][j-w[i]]; if(dp[i-1][j]==dp[i-1][j-w[i]]+v[i]…