题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死.也不能大于100. 分析:定义状态:dp[st].表示在 st 状态下的血量. 然后转移:dp[st] = max (dp[st].dp[st&~(1<<i )]+p[i].first - p[i].second); 注意初始化的时候必须在開始初始化,否则easy出错. #include…
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100610 Description Robots are becoming more and more popular. They are used nowadays not only in manufacturing plants, but also at home. One programmer wit…
给定一个m*n的方格子,要求用3*1的骨牌去覆盖,骨牌可以用横放或者竖放,问最终有多少种放置方式,将其铺满. 分析:由于最多30行,每行最多9列,所以可以按行来dp,设计每行的状态从而进行转移,考虑每个骨牌放置对下一行的影响,共有0,1,2,3种方式,0对应横放或者竖放时最下面那 个格子,此行对下一行没有影响,1,竖放时第1个,2竖放时第2个,这样进行转移.注意,第i行横放时要求上一行相应位置状态为0. 思路及代码都来自这里,其实不会做这题,看了才了解. 代码: #include <bits/s…
题解: 列举每一种3的倍数的组合,开始先求出3条边的可行解,则 六条边的可行解可以由两个三条边得来. 详见代码解析 #include<bits/stdc++.h> using namespace std; ],n,cnt,ant,],dp[]; struct node { int num,id; }angle[]; bool cmp(const node& a,const node& b) { return a.num<b.num; } int abs1(int x) {…
题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大,但是一个原子可能一直和别的原子碰撞且留到最后,所以序列是不行的. 我们只需要知道消耗的是谁就行了,而不需要管到底是谁碰撞到这个被消耗的原子,那么状态转移就更方便了,每次找到两个还没有碰撞的,碰掉其中1个,然后转移. //#include <bits/stdc++.h> #include <…
上来直接一波敲键盘,直接套Tsp问题的代码 然后WA 发现貌似这道题没有连续性. Tsp问题是一条路径,一个点到另一个点,多了一个限制,所以就需要加多一维 而这道题没有限制,也就是说那一维不需要加,我加了还WA 然后要搞清楚状态,在纸上可以写,写清楚了再敲代码 这道题一开始都是存在,初始状态是0000--所以就用0表示存在,1表示不存在 #include<cstdio> #include<cstring> #include<algorithm> #define REP(…
题意:n*m的格子,用1 * 3的矩形正好填满它,矩形不能重叠,问有几种填法 思路:poj2411进阶版.我们可以知道,当连续两行的摆法确定,那么接下来的一行也确定.当第一行还有空时,这时第三行必须要用3 * 1的去填:当第一行没有空第二行有空时,第三行必须不填:当第一行有空第二行没空,这种不能存在:当前两行没空时,我最多就是填1 * 3的方块. 代码: #include<set> #include<map> #include<cmath> #include<qu…
ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <cctype> #include <set> #include <vector> #inclu…
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状态,然后根据集合和dp的性质转移.通常用于啥啥啥..... 我引用些吧 我们知道,用DP解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态.但是有这样的一些题目,它们具有DP问题的特性,但是 状态中所包含的信息过多,如果要用数组来保存状态的话需要四维以上的数组.于是,我们就…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1119 题解:状压dp存一下车有没有被搞过的状态就行. #include <iostream> #include <cstring> #include <cstdio> using namespace std; typedef long long ll; ll dp[1 << 15] , val[15][15]; int main() {…