hdu 4614 pieces 状态DP】的更多相关文章

题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 代码: #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #in…
题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: 这道题暴力是不可以的,因为状态太多了 可以状态DP来做,用一个数组G记录战场的限制,然后用一个数组dp[当前状态或者是前一个状态][当前状态的十进制表示][前一个状态的十进制表示] 因为用的是G[1<<m]来表示,所以时间复杂度是n*(2^m)*(2^m)*(2^m),m最多为10,所以时间复杂…
题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进制数,所有N个城市的状态都能对应到一个三进制数,对一个状态而言,已经访问的城市不关心它的访问的顺序是怎样的,只要知道到达了这个状态,最后访问是哪一个城市就可以进行转移了, 于是定义状态dp[i][j]标识N个城市处于i的状态,最后一个城市是j所需要的最小费用, 状态转移方程可以是 dp[i+3^i]…
Pieces 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除所需要的最少步数.比如: axbyczbea 可以一次删除掉 abcba 得到 xyze Sample Input 2 aa abb   Sample Output 1 2 分析:这道题目刚出来时居然有超过一半的人AC,是我太弱了吗? 到底不会,先贴出标程,再慢慢消化好了 集合上的动态规划...和点…
Pieces Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1418    Accepted Submission(s): 724 Problem Description You heart broke into pieces.My string broke into pieces.But you will recover one…
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜索 不难发现,无论Alice和Bob以何种方式投掷包裹,他们得到的Magic Stones个数的和$Sum$是一定的,因此只需要计算Alice可以获得的最大的Magic Stones的个数MAXA,则Bob获得的个数为Sum-MAXA,而两者的最大的差为MAXA-(sum-MAXA)为答案.那么如何…
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先搜索,dp[key][x][y]表示在拥有钥匙key并在坐标(x,y)时需要的最少的步数,key的二进制的第i位等于1则代表拥有第i把钥匙. 需要注意以下几点: 1.可能存在同一坐标有多把钥匙. 2.墙和门是在两个坐标间进行移动时的障碍,并不在坐标点上,因此两个方向的移动都要加入wall数组. 2.…
原题直通车:HDU  1074  Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样的顺序做才能使得学分减得最少. 分析:因为n<=15数据比较小,可以用状态DP做.状态k(若k&(1<<j)==1表示第j门功课已经完成,反之未完成), 状态数最多为(1<<16)-1,每个状态k可由状太r(r<k, r&(1<<j)==0且k&…
t题意:给你n条边,构造任意个三角形,一个三角形恰好只用3条边,每条边只能一次,求面积最大值 思路: 最开始想的是先排序从大到小取,但感觉并不怎么靠谱. 最多12条边,所以可以求出所有可能的三角形面积,然后就不知道怎么办了- -, 看大神的解法,状态dp,但是没想出来怎么保存状态,ヾ(。`Д´。) 后来发现别人都是用二进制(好吧,没想到),然后dp就行了. #include <iostream> #include <cstring> #include <cstdio>…
题意: 给你n个子串和一个母串,让你重排母串最多能得到多少个子串出现在重排后的母串中. 首先第一步肯定是获取母串中每个字母出现的次数,只有A T C G四种. 这个很容易想到一个dp状态dp[i][A][B][C][D] 表示在AC自动机 i 这个节点上,用了A个A,B个T,C个C,D个G. 然后我算了一下内存,根本开不下这么大的内存. 看了网上题解,然后用通过状压把,A,B,C,D压缩成一维. 这个状压就是通过进制实现需要实现唯一表示 bit[0] = 1; bit[1] = (num[0]…