随笔分类 - DP
摘要:1、O(n^2)复杂度 dp转移方程: dp[i]=max(dp[i],dp[j]+1)(j<i && dp[i]>dp[j]) 代码: #include<iostream> using namespace std; int i,j,n,a[100],b[100],max; int main() {
阅读全文
摘要:题意: 给你一个n行m列由'#'和'.'构成的矩阵,你需要从(1,1)点走到(n,m)点,你每次只能向右或者向下走,且只能走'.'的位置。 你可以执行操作改变矩阵: 你可以选取两个点,r0,c0;r1,c1。以(r0,c0)为小矩阵左上角坐标,以(r1,c1)为小矩阵右下角坐标。你要把这个小矩阵中的
阅读全文
摘要:题目链接:https://vjudge.net/problem/UVA-1401 题目: Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing that
阅读全文
摘要:题目链接:https://vjudge.net/problem/CodeForces-833B 题意:给长度为n的数组a,和一个整数k要求把数组分成连续的k段,每段的权值是该段中不同数的个数,输出最大权值和。数据范围:n<=35000,k<=min(n,50),1<=a(i)<=n 题解:很容易想到
阅读全文
摘要:题意:给你一个长度为n的数组v,你需要把这个数组分成很多段,你需要保证每一段的长度不能超过k我们设一共有m段,每一段右边界那个数为bi那么我们要使得sum(bi*bi-b(i-1))最大 (1<=i<=m,b0=0)你需要保证bi>b(i-1) (1<=i<=m)sum():表示求和 题解:我们设数
阅读全文
摘要:比赛链接:https://vjudge.net/contest/405905#problem/D 题意: 给你一个长度为n的由0或1构成的串s,你需要切割这个串,要求切割之后的每一个子串长度要小于等于k。且每一个子串内不能全都是01交替,就比如 00101010、11010101这样没有问题,不需要
阅读全文
摘要:题意: 给你一个长度为n个序列v,你需要从中找一个子序列。这个子序列的值等于:子序列中奇数下标的值-偶数下标的值 你需要使得这个值尽可能大,让你输出这个最大值 题解: dp[i][0]表示:在原序列从1到i位置中找一个子序列,这个子序列长度为偶数的子序列最大值 dp[i][1]表示:在原序列从1到i
阅读全文
摘要:题意: 给你n个数hi,你刚开始在第1个数的位置,你需要跳到第n个数的位置。 1、对于i、j(i<j) 如果满足 max(hi+1,…,hj−1)<min(hi,hj) max(hi,hj)<min(hi+1,…,hj−1) 那么就可以从i直接一步跳到j位置 2、如果j=i+1,那么也可以直接跳过去
阅读全文
摘要:题意: 演唱会门票售票处,那里最开始没有零钱。每一张门票是50元,人们只会拿着100元和50元去买票,有n个人是拿着50元买票,m个人拿着100元去买票。 n+m个人按照某个顺序按序买票,如果一个人拿着100元买票,而你没有零钱去找给他,那么买票结束。 题目问你,这n+m个人按照某个顺序按序买票,中
阅读全文
摘要:题意: 由k(1 <= K <= 100)个工人组成的团队应油漆围墙,其中包含N(1 <= N <= 16 000)个从左到右从1到N编号的木板。每个工人i(1 <= i <= K)应该坐在木板Si的前面,并且他只能喷涂一个紧凑的间隔(这意味着该间隔中的木板应该是连续的)。此间隔应包含Si木板。同样
阅读全文
摘要:题意: 给你一个长度为n的数组,你需要从中找一个长度为m的严格上升子序列 问你最多能找到多少个 题解: 我们先对原序列从小到大排序,排序之后的序列就是一个上升序列 这里如果两个数相等的话,那么因为题目要我们求严格上升子序列,所以我们让这个数在数组中原来位置靠后的排序之后让它靠前(靠前也就是下标小)
阅读全文
摘要:题目: 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度
阅读全文
摘要:题意: 给你一个n和一个长度为n-1的由0/1构成的b序列 你需要从[1,n]中构造出来一个满足b序列的序列 我们设使用[1,n]构成的序列为a,那么如果ai>ai+1,那么bi=1,否则bi=0 问你你可以构造出来多少满足b序列的序列a 代码: 看官方题解 代码: #include<stack>
阅读全文
摘要:题意: Problem Description 初始有 a, ba,b 两个正整数,每次可以从中选一个大于 1 的数减 1,最后两个都会减到 1,我们想知道在过程中两个数互质的次数最多是多少。 Input 第一行一个正整数 test(1 \le test \le 1000000)test(1≤tes
阅读全文
摘要:题意: 人有100血和100魔法,每秒增加 t 魔法(不能超过100)。n个技能,每个技能消耗a[i]魔法值,造成b[i]伤害。普通攻击不消耗魔法,每秒1伤害。 题解: dp[i][j]在第i秒,魔法值还有j的时候Boss的最少血量 dp转移方程: dp[i+1][temp]=min(dp[i][j
阅读全文
摘要:题意: n层楼,每层楼有m个房间。找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数。 题解: 参考链接:传送门 dp[i][j]表示:在第i层楼,第j个房间所消耗的最小花费 dp[i][j]的最优值只能从
阅读全文
摘要:题意: n个点m条边的图,起点为1,终点为n,每一条单向边输入格式为: a,b,c //从a点到b点耗时为c 题目问你最多从起点1到终点n能经过多少个不同的点,且总耗时小于等于t 题解: 这道题我原本以为是改一下最短路去做,,,但是想不到怎么写。网上搜了搜,发现是拓扑+dp。 拓扑排序有啥用? 比如
阅读全文
摘要:题意: 给你b个球,m个楼层,你需要找到一个楼层数k,使得从小于k这个楼层上面扔下去球,而球不会碎。求在最糟糕的情况下你最多要尝试多少次 题解: dp[i][j]表示你有b个球,楼层总数为m,你找到那个k一共尝试了dp[i][j]才找到 如果在某楼层x下扔下球,球碎了,那么dp[i][j]状态可转化
阅读全文
摘要:题目: 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度
阅读全文
摘要:题意: 演队在口试中非常不幸。在42道考题中,他恰好没有准备最后一道题,而刚好被问到的正是那道题。演队坐在教授面前,一句话也说不出来。但教授心情很好,给了演队最后一次通过考试的机会。他让这个可怜的学生说出考试要考的科目。不幸的是,演队想不起这个科目名字,尽管他记得科目里有诸如安全、程序、设备、可能还
阅读全文