Codeforces
lishuandao
这个作者很懒,什么都没留下…
展开
-
Codeforces 570E,DP+滚动数组
题意:给定一个n*m的方格,每个各自节点都是一个小写字母(范围‘a’~'z'),现在从左上角(0,0)点出发,到右下角(n-1,m-1)点停止。问经过的路径,有多少条路径上的字目可以构成回文字符串。范围:1题解:分析:想象成两个人(A和B),分别从起点和终点出发,当他俩相遇时,走过的路径相同的走法的数量。dp[step][i][j]:表示走了step步时,A走到原创 2015-08-16 14:08:22 · 807 阅读 · 0 评论 -
Codeblocks 574D,DP
题意:给出n摞箱子,它们紧挨着放在一起,现在有如下操作:每轮,每次把暴露的箱子拿去(对于暴露的定义:左、右、上三个面中,只要有一个面没跟箱子挨着,则暴露),问,经过多少轮后,箱子被拿光。数据范围:箱子数量0分析:每轮,一摞箱子受到的影响,h[i]=max(h[i-1],h[i]-1,h[i+1]),拿光它,需要的操作轮数:num[i]=min(num[i-1]+1,h[i],num原创 2015-08-31 22:07:29 · 330 阅读 · 0 评论 -
Codeforces 570D,dfs+位运算
题意:给你一棵n个节点的树,每个节点上标了一个小写字母(‘a’~‘z’),现在定义,根节点为节点1,且它的深度为1,其他节点的深度随树的形状,依次确定。现在有m个查询,查询方式:给你一个节点u和深度h,问以节点u为根节点的子树里面,深度为h(这里的h是从节点1开始计算的)的所有节点上面的字母,(可以对字母任意进行排列组合)能否构成一个回文串。题解:因为所有查询的h都是从节点原创 2015-08-16 15:06:24 · 1204 阅读 · 0 评论 -
Codeforces 572D,DP
自己状态方程想错了,看了题解才明白,过几天消化消化再写……//看题解:dp[n%k][k-n%k],找出段与段之间相连的最大话费,然后总花费减去这部分花费,即为最小的段之和。原创 2015-09-01 15:15:00 · 392 阅读 · 0 评论 -
Codeforces 577B,鸽巢原理(抽屉原理)
题意:给出n和m,然后给出n个数ai,让你判断从这n个数中取一个非空集合,集合中数的和对m取模为零,回答这样的非空集合是否存在。范围:n分析:很容易想到dp解决,dp[i][j]表示当到达第i个数时,和对m求模为j是否可达,可达为1,不可达为0。复杂度O(n*m)。显然要当n和m较大时,要超时。看了结题报告,发现这题用到了抽屉原理的知识(当n>m,n抽屉原理:把(n原创 2015-09-11 15:18:10 · 1426 阅读 · 0 评论 -
Codeforces,578C,贪心出错,手工模拟“或”操作
题意:给出n个数,k次操作,每次操作可以将任一数乘以x,问k次操作后,这n个数的“取或”的值,最大为多少。分析:肯定是找二进制表示下,最长的那个数,进行所有的k次操作,我的错误解法,找了值最大的那个数进行k次操作,反例:3(11),2(10),若操作一次的话,应该操作10,而不是11。正确做法,枚举操作哪个数,然后将k次操作都加到他身上,通过num[]数组记录“取或”操作后,每一位原创 2015-09-17 13:03:05 · 722 阅读 · 0 评论 -
Codeforces,578C,三分求最值
题意:原创 2015-09-17 13:08:12 · 566 阅读 · 0 评论 -
Codeforces,Kefa and Dishes,状态压缩DP
题意:给定n个物品,每个物品都有一个满意度v,现在从n个物品中选取m个,选的过程中有几个规则,它们是基于选择顺序给出的规则,例如:选择的过程中a和b相邻,且a在b的前面,则满意度增加c,现在给出了k个这样的规则。问你根据这些规则,从n个物品中选取m个的最大满意度是多少。范围:0分析:通过n和m的范围,很容易想到对状态进行压缩。我的初始错误解法:dp[mask]表示当前的状态原创 2015-09-23 10:57:08 · 600 阅读 · 0 评论