题意:求从0点走到所有点又走回来的最短距离
该题又很多做法,我用的是弗洛伊德+状态压缩
先遍历所有点,求出两点间最短的距离,而后用状态压缩表示该点是否走过,(1
附AC代码
#include
#include
int map[12][12];
int dp[(1<<12)+1][12];
int min1(int a,int b)
{
if(a<b)
return a;
return...
分类:
其他好文 时间:
2015-01-22 11:09:13
阅读次数:
160
题意:给一个n*m的地图,地图只有1和0组成,0代表不可以放牧,1代表可以放牧;不能有相邻的牛,问有多少种放牧方法。
经典状态压缩 用数组map作为地图用2进制来表示0代表不可以放牧,1代表可以放牧;通过x&x
通过x&y来判断在上一行满足题意的情况在当前行能否满足题意。个人认为状态压缩DP 刚开始蛮不好学的,但是愈战愈勇才是一个ACMer该有的品质!...
分类:
其他好文 时间:
2015-01-20 18:07:33
阅读次数:
180
题目大意 用1*3的骨牌覆盖一个n*m的矩阵,求方案数。分析 m大小为9,状态压缩dp的标志,1*3的骨牌与上两层有关,故可以用2^18来表示状态,横放或者竖放,算一下时间复杂度 30*9*2^18=300000000,而题目只给了2s,晕,故这个题就是卡这种方法,于是就需要转换一下方法了,还是.....
分类:
其他好文 时间:
2015-01-02 19:53:51
阅读次数:
124
最开始的想法是搜索,发现不对,后来发现数据量很小,可以状态压缩+DP。 1 /* 4628 */ 2 #include 3 #include 4 #include 5 6 #define MAXN 17 7 #define INF 9999 8 9 char s[MAXN];10 ...
分类:
其他好文 时间:
2015-01-02 17:25:54
阅读次数:
130
题目:在火星上有一些原子,他们相互碰撞会释放能量(例如a、b),并且后面的原子会消失(b消失);
现在给你每个原子各一个,问能产生的最大能量值。
分析:状态压缩 DP。按取数的个数为阶段进行 DP,因为与顺序无关,找到下一状态更新即可。
如果只找一条路径,就是 TSP 问题,可将数组变为二维求解。
说明:要不是多组数据,直接位运算+搜索就可...
分类:
其他好文 时间:
2014-12-22 16:19:34
阅读次数:
116
The Sum of Sub-matricesDescriptionSeen draw a big 3*n matrix , whose entries Ai,j are all integer numbers ( 1 = k). The next three lines with n intege...
分类:
其他好文 时间:
2014-12-17 01:34:34
阅读次数:
260
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3811题目大意:给定1~N个数,求出至少满足一个条件的排列总数。M个条件如下:Ai位置的数为Bi分析:通过求出一个条件不满足的排列总数,从而间接的求出满足至少一个条件的排列总数。 dp[n][state]...
分类:
其他好文 时间:
2014-12-14 00:42:55
阅读次数:
188
题意: 给定n*m的棋盘(1
思路:m的范围只有1
状态表示:0代表此处留空,1代表此处被填满。01序列压缩成一个int型来表示一行的填放情况。(例如:状态为4,则代表100,即第一列填满,第二第列三空)
边界条件:
其中,
t = 2^M
代表将前i-1行填满,且第i行放置了状态s时的总方案数。
代表上一行原本放置了状态s2的前提下,当...
分类:
其他好文 时间:
2014-12-12 20:52:15
阅读次数:
175
这道题是水题,当时直接贪心就过了。
多阶段决策,其实应该用dp,他人的代码使用Vector进行预处理。
#include
#include
#include
#include
#include
using namespace std;
int n, a[12];
double dp[1<<12];
double cal(int a, int b, int c){
if(a+b<=c) ret...
分类:
其他好文 时间:
2014-12-09 09:27:28
阅读次数:
160
题意: 给定n*m的棋盘(1
思路:m的范围只有1
状态表示:0代表此处留空,1代表此处被填满。01序列压缩成一个int型来表示一行的填放情况。(例如:状态为4,则代表100,即第一列填满,第二第列三空)
递推矩阵是长这样的:
边界条件:
其中,
t = 2^M
代表将前i-1行填满,且第i行放置了状态s时的总方案数。
代表上一行原本放置了状态s2的前提下,当前行放置骨...
分类:
其他好文 时间:
2014-12-07 12:38:12
阅读次数:
176