[BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列 题目大意: 给你一个长度为\(n(n\le10^5)\)的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,使得最长上升子序列最长.求最长长度. 思路: 一定存在一种最优方案使得不确定的都选上(考虑新选上一个不确定的数,最多会使一个已确定的数失效),因此令\(a_i=a_i-cnt\)(\(cnt\)为之前不确定的数的个数),求LIS后加上\(cnt\)即可. 源代码: #include<cstdio>…
慎二的随机数列 bzoj-4282 题目大意:一个序列,序列上有一些数是给定的,而有一些位置上的数可以任意选择.问最长上升子序列. 注释:$1\le n\le 10^5$. 想法:结论:逢N必选.N是可以任意选择的位置. 具体的,我们将所有N踢出序列,将给定的权值-=前面N的个数.再在当前序列上求最长上升子序列. 正确性的话如果当前序列中的数: 如果前面的数小于后面的数,显然中间的N我也可以加上. 如果前面的数大于后面的数: 如果前面的数在原序列中的权值大于后面的数在原序列中的权值,那么这两个数…
海带头又上线了QwQ~ 这是一个奇怪的lis问题 显然一定存在一种最优答案使所有辨认不清的数都在答案中. [为什么呢]因为你完全可以用一个'N'来替换一个'K'啊QwQ~ 那么在选完所有'N'之后,一个为'K'的数的值val[i]就可以理解为val[i]-num,num指它之前'N'的个数(因为是严格单调增的) 然后就是裸的lis啦~,记得答案要加上'N'的个数. #include<iostream> #include<algorithm> #include<cstdio&g…
首先在开头加上-inf,结尾加上inf,最后答案减2即可. 设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么: f[i]=max(f[j]+min(s[i]-s[j],a[i]-a[j]-1))+1,其中j<i,a[j]<a[i]且a[j]已知 将min分类讨论后可转化为三维偏序,CDQ分治+扫描线+树状数组即可,时间复杂度$O(n\log^2n)$. #include<cstdio> #include<algorithm> using s…
首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点要被选的话,当前点被选择的条件是减掉sumv">sumvsumv后依然能和前面已减掉过sumv">sumvsumv的进行匹配. Code: #include<cstring> #include<cstdio> #include<algorithm&…
[BZOJ4282]慎二的随机数列 Description 间桐慎二是间桐家著名的废柴,有一天,他在学校随机了一组随机数列, 准备使用他那强大的人工智能求出其最长上升子序列,但是天有不测风云,人有旦夕祸福,柳洞一成路过时把间桐慎二的水杯打翻了…… 现在给你一个长度为 n 的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,使得最长上升子序列最长(为何最长呢?因为间桐慎二向来对自己的人品很有信心) . Input 第一行一个正整数 n. 接下来 n 行,第 i 行若为“K x”…
扯几句题外的,最近在看Fate/StayNight,对此人毫无好感…… 每次减一下当前可辨认数,然后随意dp一个LIS,最后记得加回去就好. #include<bits/stdc++.h> #define N 100010 using namespace std; int q[N],s[N],dp[N],sum,n,top,t,x; int main(){ scanf("%d",&n); ;i<=n;i++){ scanf("%s",s);…
题解: 网上题解还没看 我的方法是用平衡树维护一个单调栈 由于N用了一定是赚的 所以它的作用是让f[i+1]=f[i]+1 这个是可以记录的 就跟noip蚯蚓那题一样 然后插入一个值的时候查询前面的最大值再比较一下做修改就可以了 明天写下看看正确性…
股票交易 bzoj-1855 Scoi-2010 题目大意:说不明白题意系列++...题目链接 注释:略. 想法:这个题还是挺难的. 动态规划没跑了 状态:dp[i][j]表示第i天手里有j个股票的最大获利. 转移:第i天可以选择搞事情或者什么都不干. 如果不买不卖的话,有dp[i][j]=dp[i-1][j] 如果选择买入,dp[i][j]=dp[i-w-1][k]-ap[i](j-k)|k>=j-as[i] 如果选择卖出,dp[i][j]=dp[i-w-1][k]+bp[i](k-j)|k<…
bzoj-3622 已经没有什么好害怕的了 题目大意: 数据范围:$1\le n \le 2000$ , $0\le k\le n$. 想法: 首先,不难求出药片比糖果小的组数. 紧接着,我开始的想法是 $f_{(i,j)}$表示前$i$个糖果中,满足糖果比药片大的组数是$j$的方案数. 进而发现需要将两个数组排序. 到这里一切都很正常,但是我们发现了一个问题:就是我在转移的时候,分两种情况讨论.第一种是当前糖果配对的药片比自己大,第二种是比自己小. 这样的话我需要乘上两个组合数. 但是我们仔细…
Bill的挑战 bzoj-1879 Sdoi-2009 题目大意: 注释:$1\le t \le 5$,$1\le m \le 15$,$1\le length \le 50$. 想法: 又是一个看数据范围想做法的题,我们想到状压dp. 看了题解... ...网上给的状态是f[len][s]表示长度为len满足状态s的字符串个数. 光看状态... ...可能算重啊?! 其实... ... 状态:dp[len][s]表示长度为len,能且只能满足状态为s的字符串个数. 转移:我们先预处理出g[i]…
理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a,b,n\le 10^3$,$n\le min(a,b)$. 想法:我的思路简直要死.通常的,我们优化暴力来完成对题目的求解.首先,想暴力.漂亮的暴力没想到,倒是想到一个a*b*n*n的,就是枚举每一个点,如果这个点可以作为n*n正方形的左上角,我就暴力枚举这个正方形的所有点.时间复杂度:O((a-n…
垃圾陷阱 luogu-1156 题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾.Holsteins对待每一个垃圾都会选择吃掉或者垫高.Holsteins有10个点儿的生命值,每个垃圾会给她提供f的生命值.每小时Holsteins会消耗一定的生命值.问:Holsteins最早可以什么时候爬出:否则输出Holsteins可以存活多长时间. 注释:$2\le D\le 100$,$0 < t \le 1000$,$1\le h \le 25$,$1\le f \…
最短母串 bzoj-1195 HNOI-2006 题目大意:给一个包含n个字符串的字符集,求一个字典序最小的字符串使得字符集中所有的串都是该串的子串. 注释:$1\le n\le 12$,$1\le max length \le 50$. 想法:刚开始在那里AC自动机半天,然后瞅了一眼数据范围... ...状压吧兄弟!! 首先,我们先做一些预处理:把可以被字符集中串包含的串都删掉:求出两个字符串连接后的长度(这个预处理暴力即可),设merge[i][j]表示串i和串j合并后的长度. 状态:dp[…
Money奶牛的硬币 bzoj-1708 Usaco-2007 Oct 题目大意:在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的货币,有时为了更方便地交易,会发行面值为2单位的硬币. 奶牛们想知道,对于一个给定的货币系统,如果需要正好凑出一定数量的钱,会有多少种不同的方法.比如说,你手上有无限多个面值为{1,2,5,10,...}的硬币,并且打算凑出18…
Hay For Sale 购买干草 bzoj-1606 Usaco-2008 Dec 题目大意:约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包干草,每一包都有它的体积Vi(l≤Vi≤C).约翰只能整包购买,他最多可以运回多少体积的干草呢? 想法:傻逼背包裸题,直接01背包即可. 最后,附上丑陋的代码... ... #include <iostream> #include &…
音量调节 bzoj-2748 HAOI-2012 题目大意:有一个初值,给你n个$\delta$值,求最后不超过给定的限制的情况下的改变的最大值.每个$\delta$值可以+也可以-. 注释:$1\le n\le 50$,$1\le 限制\le 1000$. 想法:正负背包.在背包的之后更新用两行更新,保证每一个$\delta$值都被计入了答案. 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <…
最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2$,$1\le k\le 10$. 想法:不会...看了数据范围..卧槽?m<=2?????我们就可以进行一个简单的轮廓线dp. 首先,先分m==1和m==2分类讨论,m==1不说了 m==2 令f[k][i][j]是第一列到了i,第二列到了j,已经选取了k个矩形的最大权值. 转移:有3种转移方式:…
Code: #include<cstdio> #include<cstring> #include<deque> #include<algorithm> using namespace std; const int N = 200 + 3; char map[N][N]; int n, m, k, dp[N][N], fin; struct Node{ int x, y, val; Node(int x = 0, int y = 0,int val = 0)…
How many trees? 题目链接:https://www.codeforces.com/contest/9/problem/D 数据范围:略. 题解: 水题. $f_{i,j}$表示$i$个节点,最大深度为$j$的方案,$g_{i,j}=\sum\limits_{k = 1}^{j - 1} f_{i, k}$. 显然,如果我们枚举深度的话,可以用$ntt$优化卷积. 这里写的$O(n^3)$. 代码: #include <bits/stdc++.h> #define setIO(s)…
bzoj4368 IOI2015 boxes纪念品盒 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4368 数据范围:略. 题解: 如果在一个最优方案中,一个点$i$是这个人拿东西从左侧走过来的,我们就说这个点是蓝的. 如果是右侧的,就说这个点是红. 我们发现,并不存在三个可以不连续的点,满足红蓝红. 即,一定存在一个点$i$,满足$1\sim i$的点是蓝的,$i + 1\sim n$是红的. 接着我们维护一个$dp$状态:$f_i$,表…
子序列子序列子序列... 题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542 数据范围:略. 题解: 神仙题,感觉这个题比$D$还难一些,$Orz$原题解. http://static.eduzhixin.com/cometoj/solution/contest_38_1.pdf 代码: #include <bits/stdc++.h> #define N 5010 #define M 21 #define Pyd 100…
舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊…
[Usaco2004]等差数列 题目大意:约翰发现奶牛经常排成等差数列的号码.他看到五头牛排成这样的序号:“1,4,3,5,7”很容易看出“1,3,5,7”是等差数列.给出N(1≤N≤2000)数字AI..AN(O≤Ai≤10^9),找出最长的等差数列,输出长度. 数据范围:如题面. 题解: 以为是啥神仙题,结果看见了$1\le N\le 2000$. 可以$N^2$啊....... 考虑$DP$呗,设$f_{(i, j)}$表示第$A_i$个数为等差数列第一项,$A_j$为等差数列第二项的最长…
[BZOJ2431]逆序对数列(动态规划) 题面 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? Input 第一行为两个整数n,k. Output 写入一个整数,表示符合条件的数列个数,由于这个数可能很大,你只需输出该数对10000求余数后的结果. Sample Input 4 1 Sample Output 3…
BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树 题意:  约翰的奶牛们从小娇生惯养,她们无法容忍牛棚里的任何脏东西.约翰发现,如果要使这群有洁癖的奶牛满意,他不得不雇佣她们中的一些来清扫牛棚, 约翰的奶牛中有N(1≤N≤10000)头愿意通过清扫牛棚来挣一些零花钱.由于在某个时段中奶牛们会在牛棚里随时随地地乱扔垃圾,自然地,她们要求在这段时间里,无论什么时候至少要有一头奶牛正在打扫.需要打扫的时段从某一天的第M秒开始,到第E秒结束f0…
51nod_1412_AVL树的种类_动态规划 题意: 平衡二叉树(AVL树),是指左右子树高度差至多为1的二叉树,并且该树的左右两个子树也均为AVL树. 现在问题来了,给定AVL树的节点个数n,求有多少种形态的AVL树恰好有n个节点. 分析: 把一个AVL树拆成根节点,左子树和右子树. 左子树和右子树的情况只有两种:高度相等或者高度差1. 设f[i][j]表示i个结点,高度为j的AVL树的个数. 转移:f[i][j]+=f[k][j-1]*f[i-k-1][j-1]+2*f[k][j-2]*f…
[THUWC2017]随机二分图(动态规划) 题面 BZOJ 洛谷 题解 如果每天边的限制都是\(0.5\)的概率出现或者不出现的话,可以把边按照二分图左侧的点的编号排序,然后设\(f[i][S]\)表示左边的前\(i\)个点中,匹配了右侧的点集\(S\)的方案数.每次枚举一条边进行转移.为了防止在点集中重复转移,强行只用\(lowbit(S)\)的出边进行转移. 现在有了边组.还是把他们拆成两条概率为\(0.5\)的边. 然后发现第二类边组少算了\(0.25\)的贡献,第三类多算了\(0.25…
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度为原先叶子\(+1\)的点. 那么新加入的叶子的深度的期望是未加入之前的期望+1,假设\(f_i\)为\(i\)个点的期望. 那么\(f_i=(f_{i-1}*({i-1})-f_{i-1}+2*(f_{i-1}+1))/i=f_{i-1}+2/i\) 含义就是平均的深度乘上点的个数等于深度总和,减…
随机数的生成:min到max之间,包括两者自身 parseInt(Math.random()*(max-min+1)+min,10); Math.floor(Math.random()*(max-min+1)+min); 获取随机数列:常用于打乱出场次序又能整体通过 //获取范围内的随机数列,乱序不重复 function getOrder(start, end){ var len = end - start + 1; var myorder = new Array(); var index =…