随笔分类 -  acm-状态压缩dp

hdu 4539(状态压缩dp)
摘要:题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了。分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两行的状态,所以我们需要开设三维数组。代码实现:#include#include#include#includeusing namespace std;int n,m,a[105];int dp[2][202][202],st[202],num,b[202];int suan(int x){ int sum=0,i; for(i=1; i>1; } return sum;}vo... 阅读全文

posted @ 2013-11-29 19:58 后端bug开发工程师 阅读(307) 评论(0) 推荐(0)

poj 2923(状态压缩dp)
摘要:题意:就是给了你一些货物的重量,然后给了两辆车一次的载重,让你求出最少的运输次数。分析:首先要从一辆车入手,搜出所有的一次能够运的所有状态,然后把两辆车的状态进行合并,最后就是解决了,有两种方法:1.组合解决:代码实现:#include#include#include#includeusing namespace std;int n,sum1,sum2,a[15];int st1[1500],st2[1500],st[1500],num1,num2,num;int total[1500],all;//st1数组保存的是第一辆车能够一次运走的所有状态,同理st2数组为第二辆车的//st数组保存的 阅读全文

posted @ 2013-11-29 19:28 后端bug开发工程师 阅读(302) 评论(0) 推荐(0)

hdu 1429(bfs+状态压缩)
摘要:题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败。因为这里我贡献了一次wa。分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口,对钥匙进行状态压缩,具体看代码实现!代码实现:#include#include#include#include#includeusing namespace std;int n,m,time,visited[25][25][1025];int sx,sy,ex,ey,res;int b[4][2]={{0,1},{0,-1},{1,0},{-1,0}};char map[25][25];struct 阅读全文

posted @ 2013-11-29 19:18 后端bug开发工程师 阅读(188) 评论(0) 推荐(0)

hdu 1074(状态压缩dp+记录路径)
摘要:题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意已经说了家庭作业的名字是按照字典序从小到大输入的,所以处理起来就好多了。分析:此题的关键是如何记录路径,具体看代码实现吧!#include#include#include#includeusing namespace std;struct node{ char str[105]; int dayline; int cost;}a[20];struct st{ int now... 阅读全文

posted @ 2013-11-29 19:09 后端bug开发工程师 阅读(904) 评论(1) 推荐(0)

hdu 2167(状态压缩基础题)
摘要:题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取!分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是这个题目的输入确实让我很无语,开始的时候wa一次,后来改成了超时,最后还是参照别人的输入ac的!代码实现:#include#include#includeusing namespace std;int n,map[20][20],dp[2][(1>1; } return sum;}void solve(){ int res=0,i,j,k,p=0,max,temp; max=... 阅读全文

posted @ 2013-11-19 13:47 后端bug开发工程师 阅读(704) 评论(0) 推荐(0)

hdu 1565(状态压缩基础题)
摘要:题意:容易理解。分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!!代码实现:#include#include#include#include#includeusing namespace std;int n;int dp[2][(1>1; } return sum;}void solve(){ int i,j,k,max,res=0,temp,p=0; max=1<<n; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++... 阅读全文

posted @ 2013-11-18 21:00 后端bug开发工程师 阅读(533) 评论(0) 推荐(0)

poj 3254(状态压缩基础题)
摘要:题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案。分析:这是我做的第一道状态压缩dp的题,总的来说还是很容易理解的,直接上代码!代码实现:#include#include#include#define mod 100000000int n,m,a[15];int dp[13][(1>1))!=0) return 0; return 1;}void solve(){ int i,j,k,max,res=0; memset(dp,0,sizeof(dp)); ... 阅读全文

posted @ 2013-11-16 17:14 后端bug开发工程师 阅读(1761) 评论(0) 推荐(1)

导航