bzoj 1200: [HNOI2005]木梳 DP】的更多相关文章

1200: [HNOI2005]木梳 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 266  Solved: 125[Submit][Status] Description Input 第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中1 Output 仅包含一个整数D,表示为使梳子面积最大,需要从木板上挖掉的格子数. Sample Inpu…
Description   Input 第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中1 Output 仅包含一个整数D,表示为使梳子面积最大,需要从木板上挖掉的格子数. Sample Input 9 4 4 6 5 4 2 3 3 5 Sample Output 3 太坑爹了,证明在这里 最终方案中的a'[i]只可能是a[j]+k{|i-j|<=2,|k|<=1} 然后直接…
Description Input 第一行为整数L,其中4≤L≤100000,且有50%的数据满足L≤104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中Ai≤108 Output 仅包含一个整数D,表示为使梳子面积最大,需要从木板上挖掉的格子数. Sample Input 9 4 4 6 5 4 2 3 3 5 Sample Output 3 HINT 初看此题,这不是一道很水很水的dp题吗,一看数据范围马上枪毙.然后就放肆想,思考一下午未果,打了一发卡决策的dp,50…
题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i 个位置,染了 j 段,当前这一段颜色为 0|1 的最大价值. f[i][][] 只与 f[i-1][][] 有关,第一维用滚动数组就可以了. 代码 #include <iostream> #include <cstdio> #include <cstring> #inclu…
题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ,用状态 f[x][i][j] 表示从 i 出发,坐 x 次电梯到达 j ,最多能上升的层数.开始读入的就是 f[1][][] 数组.(注意:若开始时 i 不能走到 j , 则 f[1][i][j] = -INF) 使用倍增,用 f[x][][] 求出 f[x << 1][][] , 一直求f[2…
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\(x,y\),\(x\)子树所有边全指向\(a\),\(a\)与\(y\)子树之间的边全指向\(y\).这样答案就是\(sz[x]\times sz[y]\),要让\(sz[x],sz[y]\)尽量相等.找重心就好了. 然后DP,求划分重心两部分子树大小分别为\(x\)和\(n-1-x\)是否可行.…
链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费.但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了. 请给每家店指定一个价格,使得所有人花的钱的总和最大. Input 第一行包含两个正整数n,m(1<=n<=50,1<=m<=4000). 接下来m行,每行包含三个正整数a[i],b[i],ci Output 第…
题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\).但是在BZOJ T了=-=. \(k\)可以带权二分优化到\(O(n\log k\log n)\)就能过了吧. 不想改了. 我特么学的是假的单调.. 又是zz错误浪费半下午(╯‵□′)╯︵┴─┴ 辣鸡题还卡时间 不过就不过吧mmp Upd: Codeforces 321E.Ciel and Go…
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农民可以从它自己的钱中, 取出任意数量的钱, 交给某个相邻村子的农民. 对于每个农民给定一个值 v_i, 求    (1) 最少需要多少次操作, 使得每个农民最终拿到的钱 >= 给定的值. Input 第1行: 一个整数 N (1 <= N <= 2000)    第2行: 一个整数 X (0…
dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define mod 10007 #define N 6005 using namespace std; ];int cnt;int f[N]; int n,m; ]; boo…