CF 460C Present 【DP+】主意】的更多相关文章

给你n高树花.m日,每天连续浇筑w鲜花.一天一次,花长1高度单位 求m天后.最矮的花最高是多少 最大最小问题能够用二分来解 首先我们能够得到全部花的最矮高度即答案的下界,给这个花浇m天即是答案的上界 然后二分枚举答案,检验合法性. 怎样检验合法性 我们用个数组来记录need[i]表示 i点须要浇的次数(从i点開始的区间) 我们再用一个变量has来维护 i点已经被浇了的次数(由i点之前的在浇花范围内的点浇过的次数和) 动态地维护这两个值就可以 假设不够浇的.need[i]前缀和已经大于m天.则re…
http://codeforces.com/problemset/problem/553/A A. Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Kyoya Ootori has a bag with n colored balls that are colored with …
今天早上找一道题的bug,还是找不出来,下午刷了几道水题,晚上准备回家的事, 然后本来想打CF的,一看,数学场,不打了. 这道题的题意: 给出一个序列,每次你可以从这个序列里面选择一个数ak,删除,然后你的得分+ak, 代价是序列里面值为ak+1,ak-1的元素都删除 问:你能得到的最大得分是多少 思路: 你若删除了一个值为a的数,你的得分就是a*序列里面a的个数 因为a+1和a-1都被删除了,则其余的a不会被a+1,a-1这种情况删除了,你一定可以得到所有a的分数 所以这道题就是:在序列里面选…
先说HDU 4632这道题,因为比较简单,题意就是给你一个字符串,然后给你一个区间,叫你输出区间内所有的回文子序列,注意是回文子序列,不是回文字串. 用dp[i][j]表示区间[i,j]内的回文子序列的个数. 那么可以得到状态转移方程:dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1] + a[i] == a[j] . #define N 1005 #define MOD 10007 int dp[N][N] ; char a[N]…
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到u去,则要逆转该边方向)如果有多个这样的点,则升序输出所有. &题解: 参考自:http://blog.csdn.net/angon823/article/details/52316220 需要求每个点到其他n-1个点是否要逆转路径,那么就可以把正的路cost=1,逆转的cost=0,这只要求这个点到…
题目链接 挺好玩的一个题,1Y... #include <cstdio> #include <cstring> #include <iostream> using namespace std; ][]; ]; ]; ]; ]; int main() { int i,j,len,a,b,num; scanf("%s",s1); len = strlen(s1); ; i < len; i ++) { o[s1[i]-'a'] ++; } ; i…
题意:原来袋子里有w只白鼠和b只黑鼠龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老师谁就赢.王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来.每次抓老鼠和跑出来的老鼠都是随机的.如果两个人都没有抓到白色老鼠则龙赢.王妃先抓.问王妃赢的概率.解析:设dp[i][j]表示现在轮到王妃抓时有i只白鼠,j只黑鼠,王妃赢的概率明显 dp[0][j]=0,0<=j<=b;因为没有白色老鼠了      dp[i][0]=1,1<=i<=w;因为都是白色老鼠,抓一次肯定赢了.      d…
题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Little beaver is a beginner programmer, so informatics is his favorite subjec…
简单入门版:洛谷1280 时间交叉和倒序处理的思路是相同的,相较之下此题更多的条件是:1.每个任务可以在很多个时间点中选一个去做:2.会有捣乱. 解决方法:1.每个时间点选哪个根据规则的话是固定的可预处理,但这样会发现某一段时间都是选的那个最大的,然鹅实际上只能选一次对吧.但其实没问题,很难讲,总之冷却时间点大等于最后时间点这个条件保证了倒序处理时不会重复拿这个任务,倒序和能拿必拿这两点很关键.2.捣乱就比较常规的dp了,第一维时间点,第二维捣乱几次了,然后每层按照捣不捣乱转移. 主代码: ;…
/* 刚开始我考虑0的情况,想将他剔除就将lcmn设为-1,这样还要判断0和lcmn是-1的情况很麻烦而且但是一直出错 后来觉得不用管0的情况就行了,可以认为符合. 解:将lcmn离散化,因为1-9的公倍数必是2520的因子并且只有48个 所以用一个数组离散化,记忆的时候直接调用离散数组即可 因为一个数的所有数字的最小公倍数必定是2520的因子,所以将这个数对2520取余缩小范围并记忆 三维,第一个长度,第二个对2520取余,第三个是lcm值 */ #include<stdio.h> #inc…