状态压缩
高凌霄
这个作者很懒,什么都没留下…
展开
-
hdu 1429 胜利大逃亡(续)
刚开始不知道有状态压缩,定义了一个这样的结构体 struct node() { int x,y; int a[10]; int step; }; 数组a用来存放钥匙,然后代码写出来,时间和内存齐爆。很无语。 然后查题解。要用状态压缩,我还是第一次听说这名词。 就是定义一个三维数组,第三维存储在某种状态下,是否走过map[x][y]位置。 本菜鸡参考这位大神原创 2015-10-02 20:44:24 · 412 阅读 · 1 评论 -
hdu 1074 doing homework
一道状态压缩的dp题。我是第一次接触这类题型,说实话,我是完全摸不着边。大神的解题报告我也看不懂,一行代码一行代码的响了很久,终于弄清了点头绪。 dp[i]:到第i种情况,最小扣分数。 我们用状态压缩,比如,二进制100代表完成了第三门课程。即dp[4]表示只完成第三门课程的最少扣分数。 本题还加入了路径记录。可以创造一个结构体。struct DPT{ int time; i原创 2015-10-10 21:15:02 · 299 阅读 · 0 评论 -
hdu 3182 Hamburger Magi
http://acm.hdu.edu.cn/showproblem.php?pid=3182 建议先做hdu 1074题。 同1074题思路差不多,但这里加了条件判断,即判断做第k个汉堡是是否做出了它的所有先决汉堡,对于每个先决汉堡,也要进行相同的判定。这显然有点难度。 优化的一个思路是在初始化时将所有dp.value初始化为负无限大,只有dp[0].value=0。此时,对于任意一种情况,只原创 2015-10-12 15:02:09 · 428 阅读 · 0 评论 -
hdu 4568 hunter
第一次做最短路的题型,花了好久学习最短路。做题,测试时发现有bug,找了4个小时,终于找了出来。尼玛,开心死了! 先用spfa算法算出每个宝藏点之间的最短路径,然后就变成了裸的状态压缩dp了。 建议先做1074题和3182题。 ro[i][0]表示第i个宝藏点距离边界的最短距离。 状态压缩思路同1074和3182差不多。#include<iostream>#include<algorith原创 2015-10-13 22:22:10 · 425 阅读 · 1 评论 -
hdu 2167 Pebbles 状态压缩dp
建议先做hdu1565题。两题类型相似。1565稍简单。 注意该题存在某行一个都不选的情况。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int dp[2][1<<20];int map[20][20];char c[20];int s[1<<15]原创 2015-10-15 16:43:25 · 378 阅读 · 0 评论 -
hdu 1565 方格取数(1) 状态压缩dp
做了很久的一道题。 做dp题要先写出子问题。 做dp题要先写出子问题。 做dp题要先写出子问题。 dp[i][j]代表到第i行第j种情况,能取得的最大的数。 所以dp[i][j]=max(dp[i-1][k]+sum,dp[i][j]); 这里k&j!=1。sum为改行的值。 定义一个dp[20][1<<20]的数组mle,可以定义一个dp【2】【1<<20】的滚动数组。#includ原创 2015-10-15 14:17:08 · 356 阅读 · 0 评论