【线型DP】CF1012C Hills 小山坡】的更多相关文章

来了来了. 题目: 给你n个数,你一次操作可以把某一个数-1(可以减为负数),你的目标是使任意的k个数严格小于它旁边的两个数(第一个数只用严格小于第二个数,第n个数只用严格小于第n-1个数),问最少需要几次操作.k是不确定的,请输出1<=k<=n/2(向上取整)时的答案. 输入格式: 第一行一个正整数n 第二行n个正整数ai 输出格式: 一行 1<=k<=n/2 个数,第i个数代表k=i时的答案 数据范围: 1 ≤ n ≤ 5000 1 ≤ ai ≤ 100000 输入 #1复制…
[线型DP]洛谷P2066 机器分配 标签(空格分隔): 线型DP [题目] 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M. 输入格式 第一行有两个数,第一个数是分公司数N,第二个数是设备台数M. 接下来是一个N*M的矩阵,表明了第 I个公司分配 J台机器的盈利. 输出格式 第1行…
思路还是比较简单的 dp 吧,但是就是想不出来-甚至类似的方程都被自己推翻了 Description Welcome to Innopolis city. Throughout the whole year, Innopolis citizens suffer from everlasting city construction. From the window in your room, you see the sequence of \(n\) hills, where \(i\)-th o…
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. Input 一个正整数 N. Output 一个数,答案模 10000007 的值. Sample Input 样例输入一 Sa…
题目大意:有n个山丘 , 可以在山丘上建房子 , 建房子的要求是 : 该山丘的左右山丘严格的矮于该山丘 (如果有的话),你有一架挖掘机,每单位时间可以给一个山丘挖一个单位的高度,问你想要建造 1,2,3……n/2需要多少时间 输入:n个山丘的高度 输出:分别输出建造1,2,3……个房子的代价 分析:可以易得出两个性质 1. 不可能连续两个山丘都建造房子 2.如果该山丘建造房子就不可能挖该山丘(因为要保证该山丘严格的高于附近两个山丘,如果将该山丘高度降低,只能得到不会更优的结果) 那么我们可以讲每…
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N.比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等.这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8…
嘤嘤嘤,我又来了,刚A完就写,这个沙雕题有丶恶心.                  ???时间4.11发现所有表情包都莫得了 题目: In an n×n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3, . . . , n∗n, as shown below:   Prince stands in square 1, make p jumps and…
显然的DP是,dp[i][j][val] val是1e6的 简化 发现,其实决策很有限,最优解的i-1的val选择有限 题解 这里的一个trick是,f[i][j][0]转移不考虑a[i]和a[i-1]的大小关系,如果不计算到j的话,只能更差,而且之后会有一种方案记录到 这样,保留了一种可能的a[i]>a[i-1]的0状态,所以后面1的转移就存在这种情况. 代码: #include<bits/stdc++.h> #define reg register int #define il in…
比较套路的dp题 /* dp[i][j][0|1]:前i座山盖了j座房子,第i座不盖|盖 dp[i][j][0]=min( dp[i-1][j][0] , dp[i-1][j][1]+max(0,a[i]-a[i-1]+1) ); dp[i][j][1]=min( dp[i-2][j-1][0]+max(0,a[i-1]-a[i]+1), dp[i-2][j-1][1]+max(0,a[i-1]-min(a[i-2],a[i])+1) ); 因为有冗余态,所以要初始化dp数组 */ #inclu…
题目大意: 有几座山,如果一座山左右两边的山比它矮,那么可以在这个山上建房子,你有一台挖掘机,每天可以挖一座山一米,问你需要花多少代价可以分别盖1.2.3--座房子.(给出山的数量,以及每座山的高度). 题目分析: 性质1:不会有两座相邻的山都建房子.性质 2:一座山盖房子就不会被挖,被挖就不会盖房子(两条废话) 每一座山有两种情况:建房子或者不建,可以用一维来保存([ 0 ]/[ 1 ]). 1到第 i 座山的代价和只与 i 前面的两座山有关:如果这座山( i )不建,那么他前面那座山( i-…