
codeforces
文章平均质量分 67
My_ACM_Dream
生活没有彩排每天都是现场直播
展开
-
codeforces 158E Phone Talks (dp)
题意:麦克是个名人每天都要接n电话,每通电话给出打来的时间和持续时间,麦克可以选择接或不接,但是只能不接k通电话。如果某通电话打来时麦克正在打电话他可以选择让电话排队,或者忽略不接。当麦克空闲时首先从排队的第一个打来的电话开始接起。麦克是个很懒的人,所以需要大量的睡觉,但是睡觉的时间必须是连续的,因此要求出麦克能睡觉的最大连续时间。题解:一开状态想错了,想成了dp[i][j][2]前i原创 2015-02-05 10:02:57 · 551 阅读 · 0 评论 -
codeforces 14E Camels (计数类dp)
题意:给出n,t,分别表示有n个数,t个波峰,t-1波谷。要求出满足n个数组成类似于波一样的结构,并且波峰t个,波谷t-1个,的种类数。题解:要什么状态就加什么状态呗,我们要确定递推关系,坑定要知道前一个状态是波分还是波谷,才能增加数字使这个状态称为波分或者波谷。要去定上个数是波分还是波谷,只要知道前两个数选的是什么,然后枚举这个数这样就可以构造波峰和波谷。dp[i][j][k][x]原创 2015-02-11 11:52:21 · 665 阅读 · 0 评论 -
codeforces 18E Flag 2 (dp)
题意:给出一个字符串的矩阵,现在要求按这样的规律变换:1、每行只能有两中字母。(每列可以多个字母)2、任意相邻的字母不能相同。求最少的操作数,并且要把变换后的矩阵打印下来。题解:分析下这些要求,会发现一行中必须要是这样的形式才能满足条件:ABABAB....。那么我们定义状态dp[i][A][B]表示第i行用了字母A,B这两个字母构成形式ABABA...(有先后顺序的)原创 2015-02-11 22:23:33 · 739 阅读 · 0 评论 -
codeforces 56D Changing a String (dp编辑距离)
题意:给出两个串,问第一个串变成第二个串的最小操作以及具体操作要输出,操作有删除、插入、替换。题解:dp[i][j]表示第一个串在i,第二个串在j时的最小操作数,删除操作dp[i-1][j],插入操作dp[i][j-1],替换操作或不操作dp[i-1][j-1]。路径打印可以记录路径或者用通用方法(dfs回溯)。#include#include#include#i原创 2015-02-14 13:05:34 · 620 阅读 · 0 评论 -
codeforces 67C Sequence of Balls (dp)
题意:给出两个串,有四个操作,每个操作都有一个操作时间,删除、添加、替换、把相邻的交换。问A变到B最少的时间。题解:dp[i][j]表示A处理到了i,B处理到了j的最少时间。首先如果不考虑第四个操作那么状态方程很容易:dp[i][j] = max{ dp[i][j-1]+t1 , dp[i-1][j]+t2 , dp[i-1][j-1]+t3 }但是第四个操作比较复杂,其实原创 2015-02-15 23:41:44 · 641 阅读 · 0 评论 -
codeforces 464D World of Darkraft - 2 (概率dp)
题意:一个人去玩world Darkraft2这个游戏,他有k个装备栏,每个装备初始时的装备等级都是1,假设现在的某个装备栏的装备等级是j,每次打一个怪兽会随机获得某个装备栏中对应的装备(获得概率相同),并且会随机得到[1,j+1]之间等级的装备,当然这个人会选择最好的装备留下。换下来的装备就会卖掉,装备的价格等于等级数。问这个人获得的金币数的期望是多少?题解:见注释 dp[i][j]原创 2015-02-20 17:09:06 · 678 阅读 · 0 评论 -
codeforces 126B Password (kmp,next应用)
题意:给出一个串,求出这个串中公共前后缀的最长长度,但是这个最长长度要能在除了前缀和后缀的中间找到。题解:next应用#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long原创 2015-02-21 21:26:24 · 585 阅读 · 0 评论 -
codeforces 520E Pluses everywhere (数学题)
这题ORZ。主要思想就是计算某位能成为个位、十位、百位。。等的个数。#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,i原创 2015-04-27 22:09:07 · 770 阅读 · 0 评论 -
codeforces 132C Logo Turtle (记忆优化)
题意:一个机器人听指令行动,F表示前进一步,T表示转向。给出一串命令字符,你要k次变换字符,使得机器人走的最远。每个字符可以执行多个命令,命令就是将F变为T,T变为F。题解:开始时想到用贪心,但是这个测试例子推翻了FTTF连续多次出现T。后来想应该就是dp,状态方程dp[i][j][k][2]所有状态都在,前i个点用了j个命令且第i次命令用了k次方向为0或1的最大距离。这样超级难写原创 2015-02-05 20:50:30 · 635 阅读 · 0 评论 -
codeforces 163A Substring and Subsequence (dp,最长公共子串变形)
题意:给出两个串,问a的连续子串和b的子串(可以不连续)相同的个数。题解:dp[i][j]前i个a的字母和前j个b的字母相同子串个数。#include#include#include#include#include#include#includeusing namespace std;typedef long long lld;const int oo=0原创 2015-02-05 11:32:17 · 739 阅读 · 0 评论 -
codeforces 148E Porcelain (dp)
题意:有一个公主一生气就喜欢摔东西。现在有很多个柜子,每个柜子里面装着很多物品,公主每次摔东西只能随机的选择一个柜子,拿出最左边或者最右边的一个物品摔碎,给出公主最多生气的次数,求生完气之后,公主摔掉物品的价值的最大总和。题解:开始这样想dp[i][j]表示前i个点选j个物品的最大价值,然后枚举左右各取多少个,草稿上写了下,四重循环肯定华丽的TL。其实可以先预处理出第i行去几个物品的最原创 2015-02-06 22:36:12 · 554 阅读 · 0 评论 -
codeforces 264C Choosing Balls (dp)
这题各种TL,各种wa,且看大犇解析非常牛逼的将O(n^2)降到O(n)#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int oo=0x3f3f3f3f;const ll OO=1LL<<61;const in原创 2015-02-07 12:19:39 · 647 阅读 · 0 评论 -
codeforces 383D Antimatter (dp)
题意:给出一个数字串,问任取子串,见子串的每个数字之前加上‘+’或者‘-’使得这个子串的和为0,那么这样的子串个数有多少。题解:明显是dp,数据量也不是很大,题目所给了总数的和不会超过10000这其实就是一个状态,dp是统计一类问题的足有解,然后找出我们想要的问题解,那么这题就是统计前i数字和为num的种类数,计算完后只要得到和为0的个数就好。那么状态方程很容易了dp[i][j]表示到原创 2015-02-08 22:28:43 · 847 阅读 · 0 评论 -
codeforces 54C First Digit Law (数位dp+概率dp+背包模型)
题意:给出n个区间,然后每个区间中取任何数的概率都是1/(r-l+1),现在问n个区间任意的组成的任意集合,求某个集合满足里面的数首位是1的个数大于k的概率。题解:说起来很绕,读了一个小时也没读懂啊!不看题解的翻译根本读不懂题目啊!我严重怀疑出题人的英语水平。不过是一道好题,首先要得到区间中首位为1的数字个数要数位dp或者组合数学,然后就是背包模型的概率dp,因为要求任意字集合满足原创 2015-02-11 14:34:43 · 931 阅读 · 0 评论 -
codeforces 119C Education Reform (dp+路径打印)
题意:一个学校要排出n天的课程表,有m个课程,每天有且只能一个课程,给出每个课程需要做的作业量的范围(a[i]——b[i]),和难度。要求n天的课程要按难度递增,并且相邻两天的作业量要满足x[i]=x[i-1]+k或者x[i]=x[i-1]*k。问如何排课程表使得总作业量最大。题解:dp[i][j][k]表示到第i天位置,第i天选了j课程,作业量为j+a[i],因为a[i]可以达到10原创 2015-02-10 18:06:38 · 816 阅读 · 0 评论 -
codefores 73C LionAge II (dp)
题意:给出一个字符串,然后给出一个k表示能改变的字符串的个数,然后给出n对的字母,这些成对的字符如果出现在字符串中就能够加上对应的价值。问如何改变字符串使得价值最大。题解:有什么状态就加什么,dp[i][j][k]前i个字母,以j为结尾,改变k次,能得到的最大值。转移方成分两种递推。这道题很奇葩,经过检验发现最大的价值可以为负数,真心坑啊,如果原串刚好有一对字母是在给定n对字母原创 2015-02-09 21:49:23 · 502 阅读 · 0 评论 -
codeforces 313D Ilya and Roads (区间dp)
题意:n个洞,m个公司,至少补k个洞,每个公司只能补Li到Ri之间的懂,并且费用是ci。问补至少k个洞的最小费用。题解:首先我么要这题要知道任意段区间之间的费用是多少,因为公司的区间是可以重合的,但是重合部分要多计算,那么我们可以用(n^3)的计算出任意段区间的费用。接着我们就可以dp了,dp[i][j]表示前i个点补了k个洞的最小费用。状态方程和往常非常不同本来是要O(n^4)现原创 2015-02-09 17:30:15 · 685 阅读 · 0 评论 -
codeforces 19B Checkout Assistant (背包)
水题#include#include#include#include#include#include#includeusing namespace std;typedef long long lld;const int oo=0x3f3f3f3f;const lld OO=1LL<<61;const int MOD=1000000007;#define maxn 200原创 2015-02-09 16:16:39 · 721 阅读 · 0 评论 -
codeforces 283C Coin Troubles (神级思维+判环+背包)
题意:给出一些硬币的价值,然后给出一个人拥有的硬币价值,问能有多少种方法得到这种价值,但是还有p个限定条件,就是bi的价值要大于ci的价值。题解:神级的处理方法,如果要是限制条件满足,那么取m个ci肯定要去至少m个bi,那么我们把ci的价值加上bi的价值(假设bi-A,ci-B),那么现在ci的价值就是A+B,总价值要减去ai的价值即-A。然后就可以愉快的完全背包。#include原创 2015-02-09 00:27:16 · 817 阅读 · 0 评论 -
codeforces 201C Fragile Bridges
wa代码#include#include#include#include#include#include#includeusing namespace std;typedef long long lld;const int oo=0x3f3f3f3f;const lld OO=1LL<<61;const int MOD=1000000007;#define eps 1e原创 2015-02-10 10:31:36 · 783 阅读 · 0 评论 -
codeforces 509C Sums of Digits (贪心对位操作)
题意:给出n个数字,这些数字数由另外n个数字各个位数的和得来的。求另外n个数,要尽量小,而且要递增。题解:贪心,对位进行操作,有点像数位dp。#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int o原创 2015-02-16 21:37:44 · 685 阅读 · 0 评论 -
zoj 3375 Imperishable Night (状压dp)
题意:开始的时候有point,lv,tv.都是0。每个洞穴有四个值ai,bi,xi,yi, xi表示,yi分别表示有a类xi个,b类yi个。如果选择a类那么point+=lv,tv+=ai,如果选择b类point+=tv,lv+=bi;问,如何得到最大的值point。题解:状压dp,分别对整体状压dp,和对每个洞内部dp,对洞内部其实用贪心也可以,复杂度O(1)。分析:首先原创 2015-02-04 14:44:08 · 507 阅读 · 0 评论 -
codeforces 167B Wizards and Huge Prize (概率dp,类似背包)
题意:给出n个比赛,每个比赛都有赢的概率pi,并且能得到一定的钱,但是钱需要背包装,比赛赢了分两个情况:一个是获得金币,一个是将背包扩容,如果值为-num表示得到num的金币,如果是正表示背包扩容。问至少赢了l局并且背包能装下的最大概率。题解:很明显的概率dp,类似于背包,和之前做的比起来简直简单爆了。两个决策一个取一个不去。dp[i][j][k]表示前i个比赛赢了j个比赛还剩的容原创 2015-02-07 14:46:49 · 698 阅读 · 0 评论 -
codeforces 360B Levko and Array (dp神题)
题意:给出一个序列定义c=max(a[i+1]-a[i]) 11 n题解:这题要逆向思维,实际上我们并不可能枚举要换掉那些数,因此我们枚举c,然后判断c是否可能从数列变来。显然二分能节省很多时间。判断c是否可行,用dp做,dp[i]表示i不改变的最小改变次数,那么状态方程就是:dp[i]=min{dp[j]+i-j-1} i-j-1表示i-j的开区间的所有数都进行改变,想想如果要原创 2015-02-08 11:41:28 · 1392 阅读 · 1 评论 -
codeforce 44E Anfisa the Monkey (记忆搜索)
题意:给出一个串,要求分成k份,每份的长度在[a,b]之间 求可行的一个方案。题解:搜索题,直接搜索超时,用dp存下走过的情况。dp[i][j]表示前i个点,分成了j个集合是否走过。#include#include#include#include#include#include#includeusing namespace std;typedef long原创 2015-02-11 17:09:41 · 717 阅读 · 0 评论 -
codeforces 41D Pawn (简单dp+路径打印)
题意:给出一个矩阵,现在可以选择最底下一行的某一列作为开始点,直到到达最上面的行位置。每个字有一个值。要求求出最大的分数值并且这个分数值要能整数k这个整数。题解:和以往的水题dp不同这题限制了要整出k,其实需要什么状态就取什么状态呗。dp[i][j][k]表示i行j列余数为k的最大分数值。那么就很容可以求出解了。计算时,多加枚举左右点的余数值。#include#inclu原创 2015-02-10 23:32:53 · 888 阅读 · 0 评论 -
codeforces 30C Shooting Gallery (概率dp)
题意:给出n个会定时出现的靶子,每个靶子给出出现的时间坐标和能打中概率,问打中靶子数的期望最大值。题解:简单的概率dp,dp[i]表示以i为结尾打中靶子数期望的最大值。注意精度!#include#include#include#include#include#include#includeusing namespace std;typedef long long l原创 2015-02-09 20:09:06 · 657 阅读 · 0 评论 -
codeforces 413D 2048 (dp)
题意:这是个2048游戏的简化版,只有一行,如果有两个位置的值相等那么就相加,知道不能加为止,题目给出n个数只有三种情况0、2、4, 0表示可以是2也可以是4。问给出的n个数中满足和大于k的方案数。题解:一眼看过去方程很快出来,看似很简单但是很难。因为有这样数据8422,2242222,这样的话中间有组个不能相加,那么要处理后面如果后面的加起来等于前面的于是又可以相加。看到这种数据的确原创 2015-02-15 15:54:47 · 1059 阅读 · 0 评论 -
codeforces 268D Wall Bars (dp)
题意:给出一个n层的楼,每层有四个方向,可以建一个bar,两个层之间的bar要小于h才能可达。求满足至少能达到n-h+1~n方案数!题解:莫名其妙的题目,dp[i][j]前i个高度这个高度建的方向为j的方案书,j=0表示没建。奇葩的题目,这样的状态方程是错的。正解更吓人 dp[i][a][b][c][d]表示i高度a方向是否可达(a=0、1),并且距b方向的bar的距离为b,距原创 2015-02-16 15:27:53 · 826 阅读 · 0 评论 -
codeforces 107C Arrangement (状压dp)
题意:给出n个人和n个座位,给出m对限制,每对限制要求ai这个人的座位要排在bi这个人的前面。现在要求满足条件的第y-2001大的字典序的座位排列。题解:题目挺好的,处理方法很特别。对于这样的题目,我们首先想想暴力,那就是枚举从1开始的各种满足条件的序列,其实在枚举的时候我们可以这样优化,首先枚举第一个作为排的人,然后以排好的人为基准,往下继续排计算出对应的排列数,如果排列数大于想在的原创 2015-02-20 15:26:41 · 1067 阅读 · 0 评论 -
codeforces 83E Two Subsequences (状态dp,难)
题意:给出一些串,现在要将这些串分成两个部分,每部分的要将这部分的串进行合并,合并就是将公共前后缀去掉变成一个串(每次操作两个串知道全部变成一个串为止,当让长度要尽量小)。问如何划分使得两个集合各自合并后加起来的长度最小。题解:网上的题解虽然看懂了但是还是不懂得如何操作。查了下cf大牛ac的代码,做法是这样:dp[i][s]长度为i状态为s的串的某个部位,因为每个串最多20长度可以状压原创 2015-02-21 16:00:32 · 1004 阅读 · 0 评论 -
codeforces 182D Common Divisors (kmp,next应用)
题意:题意很简单,就是求两个串公约串的个数。题解:要得到两个串的next数组求出格子的最小循环节,然后判断四种情况1、a==len1&&b==len22、a==len1&&b==len13、a==len2&&b==len24、a==b 对于这种情况我是通过很多实例得出的,因为在123都不满足时,如果最小的循环节长度不同是不可能有公约串的。#include#incl原创 2015-02-22 16:22:46 · 573 阅读 · 0 评论 -
codeforces 234F Fence (dp)
题意:给出n个栅栏,需要涂上红色和绿色。红色的面积不能超过啊a,绿色的面积不能超过b。给出每个栅栏的高度,宽度都是1。所得的价值等于相邻栅栏不同颜色的面积。求最小的价值。题解:dp[i][2][j]前i个栅栏,第i个栅栏涂成红色,用去j面积的红色栅栏,所得的最小价值。这题无线TL,就因为输入的时候就超时了,要用文件流读入才能过,坑了2个小时。。。。。#include#incl原创 2015-02-05 22:52:13 · 561 阅读 · 0 评论 -
codeforces 213C Relay Race(dp)
题意:两个人一个人从左上角一个人从右上角,分别朝着对方的起点走。有n*n的格子,每个格子有一个分数,问两人路径通过的分数和,如果两个人同走了一格那么分数只能加一次。题解:一开始想这样做dp[i][j][k][l]表示第一个人在i,j第二个人在k,l能得到的最大值。但是内存明显不够,然后用滚动数组,但是还是各种wa。大神这样做dp[i][j][k]表示两个人都走了i步,第一个人在原创 2015-02-07 21:35:37 · 832 阅读 · 0 评论 -
hdu 3681 Prison Break (BFS+状压)
2010杭州赛区的题目题意:机器人从F出发,走到G可以充电,走到Y关掉开关,D不能走进,要求把所有开关关掉,且电量最少,并求出该最小电量。题解:像这种题目暂时找不到很好的解决方法,可以试着想想暴力的方法,就是枚举每个电量是否满足,一般这样的枚举都是用二分,对于判断是否满足条件可以用状压dp来解决。我们首先要预处理出充电地点和发电站两两之间的最短路径可以用bfs解决,然后将这些点原创 2015-02-08 20:01:53 · 549 阅读 · 0 评论 -
codefroces 482C Game with Strings (概率dp神题)
题意:给出n个字符串,选择每个字符串的概率等同都是1/n,每个字符串的长度相同。现在要玩一个游戏,就是A去任意藏起来一个字符串,B通过询问这个字符串的某个位置是什么字符,然后来判断这个字符串是什么。问:询问问题的数量的期望是多少。题解:一看题目,无法下手,堪称神题啊。大牛正解:dp[s]表示状态为s的时候到问出这个字符串是什么还需要的概率,s中存的是问题。p[i]表示询问了i个问题原创 2015-02-14 16:14:59 · 667 阅读 · 0 评论 -
codefroces 425E Sereja and Sets (dp)
题意:给出一个数n表示区间的长度,集合S,表示n的子区间的集合。f(S)表示S集合最多可以选择多少个不相交的区间。现在给出n,f(S)=k,求出这样的集合数。题解:这题其实很难,定义这样的状态dp[i][j]前j个点分成i个区间能得到的方案数,用到排列组合,对于这样的状态dp[i-1][k] k到j之间的区间进行排列组合,分割,[k+1,k+1],[k+1,k+2]...[k+1,j]原创 2015-02-16 11:23:25 · 557 阅读 · 0 评论 -
codeforces 82D Two out of Three (记忆爆搜)
题意:给出一个队伍,每个人都有一个处理时间,每次可以选择队伍前三个人中的两个人进行处理,处理的时间等于这两个人时间的最大值。问你处理时间的最小值。题解:这种题目有点像是排列组合,每种子情况也对应着不同的子情况,用搜索做肯定能行但是会超时,所以用dp记忆下,记忆爆搜。dp[i][j]表示以i,j两人为头的队列的最小时间。#include#include#include#in原创 2015-02-09 13:04:04 · 828 阅读 · 0 评论 -
codeforces 429B Working out (四方向dp枚举交点)
题意:给出一个矩阵,矩阵每个格子对应着分数,有两个人路线分别为(1,1)-(n,m) (n,1)-(1,m) 这两个人有且只能相遇一次,相遇点的分数不计算,求分数和的最大值。题解:分四个方向dp,然后枚举交点,求四个点到这个点的距离和。这样的情况有两种一:A---- B | |----------| |C -----D二:原创 2015-02-16 18:06:40 · 512 阅读 · 0 评论 -
codeforces 432D Prefixes and Suffixes (kmp+dp)
题意:给出一个串,求这个串种即使前缀又是后缀的子串在这个串出现的次数。题解:首先得到next数组,然后定义dp[i]表示长度为i的前缀出现的次数。很好理解了,dp[next[i]]+=dp[i],dp初始化为1。#include#include#include#include#include#include#include#includeusing name原创 2015-02-22 19:13:39 · 711 阅读 · 0 评论