- 博客(54)
- 收藏
- 关注
原创 hdu 4539 郑厂长系列故事——排兵布阵 (状态压缩dp)
题目链接:点击打开链接#include#includeint dp[110][200][200];// dp[i][j][k] 存第i行 状态为state[j] 上一行状态为state[k] 所能安排士兵的最大值int num[200];// 存合法状态对应的士兵数int state[200]; // 存行内不冲突的合法状态int map[110];// 用二进制按行存图int
2014-08-06 09:58:12
416
原创 hdu 1565 方格取数(1) (状态压缩dp)
题目链接:点击打开链接#include#includeint dp[25][20000];//存第i层 取第j种状态能得到的最大值int num[20000];//存合法状态int map[25][25];//存矩阵int limit;//枚举上界void init(int n)//初始化{ memset(dp,0,sizeof(dp)); int i,
2014-08-04 12:58:50
416
原创 light oj 1032 - Fast Bit Calculations(数位dp 记忆化搜索解法)
题意:问[0,n]之间所有数用二进制bao
2014-07-25 15:45:18
460
原创 hdu 4864
题目链接:点击打开链接//先考虑时间在考虑优先级#include#include#include#includeusing namespace std;struct node{ int x,y;}a[110000],b[110000];//a存机器 b存任务int comp(const void *a,const void *b){ struct n
2014-07-23 15:46:21
453
原创 hdu3555(数位dp记忆化搜索)
#include#include__int64 dp[25][3];//dp[pos][pre] pos记录位数 pre记录前缀状态0表示前缀不包含49且pos+1不是4 1表示前缀不包含49且pos+1位是4 2表示前缀包含49int digit[25];//存数的各位上的数字int l;//存数的位数__int64 dfs(int pos,int pre,i
2014-07-09 16:22:15
486
原创 Post office (区间dp 记忆化搜索) http://acm.zzuli.edu.cn/problem.php?id=1468
从中间向两边推进dp[x-1][y+1]=dp[x][y]+dist[y]-dist[x];//#include#includeint dp[1100][1100];int dist[1100];int n;void init(){ int i; memset(dp,-1,sizeof(dp)); for(i=1;i<=n;
2014-05-16 10:42:15
2755
原创 Fzu 2113 Jason的特殊爱好 (数位dp)
#include#include__int64 dp[20][20];//dp[i][j]表示第i位前有j个1这种状态1的总数int num[20];//存每位数字__int64 a,b;__int64 dfs(int pos,int n,int flag)//pos表示位数 n表示pos位前有多少个1 flag为1表示当前位以前的位上的数与num[]
2014-05-09 10:20:34
826
原创 nyoj 1030 Yougth's Game[Ⅲ](区间dp 博弈组合题)
//区间dp和简单博弈组合#include#includeint dp[1100][1100][2];//dp[i][j][1]表示在区间[i,j]先取数的人在所有数都被取完时得到的最优情况 dp[i][j][0]后取数的人在所有数都被取完时得到的最优情况int n;int a[1100];int min(int a,int b){return a
2014-05-08 21:41:46
656
原创 poj 1948(背包)
//思路是看大神的//把三角型的一边当成一维费用 另一边当做另一维费用 //第三边可以通过sum-第一边-第二边得到//每一根棒子作为一个物品 棒子的长度作为物品的费用//所有棒子长度和的一半作为背包的大小 因为三角形任意一条边长不可能超过总长的一半#include#include#include#define N 1700/2i
2014-05-06 16:01:09
451
原创 hdu 1401(深搜)
//四个点一起搜//标记四个状态 用八维数组标记//每搜一个状态需要标记24种状态#include#includeint map[10][10];int ans[10][10];char dist[8][8][8][8][8][8][8][8];int dir[4][2]={1,0, 0,1, -1,0, 0,-1};int f;i
2014-05-06 09:13:57
517
原创 Hdu 2196 Computer(树形dp)
//树形dp//深搜两次 第一次随便找个节点当做根节点深搜一次记录每个分支的价值 和各个节点的答案//第二次深搜 更新子节点与父节点之间的分支的价值// 根据子节点所连分支的所有价值更新子节点的答案#include#include#define N 11000#define debug 0int dp[2*N];//存答案int vis[2*N]
2014-05-01 11:21:24
419
原创 hdu 1520 Anniversary party(树形dp)
//树形dp入门第一题// 题意: 给一棵树每个节点都有权值 子节点和父节点不能同时取 问能取得权值之和最大是多少 看似有向边其实为无向边////从任意一个节点x dfs到叶节点 并计算叶节点的值 然后边回溯边dp 求当前节点的最优状态 当回溯到x时整棵树的最优解就得到了//dp[x][0]表示不取节点x得到的最优解 dp[x][1]表示取节点x 当取该节点时 就不能取它的父节点(
2014-04-29 15:41:26
450
转载 ACM的你伤不起!!!
劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁再跟劳资讲算法之美算法的力量,劳资一本算法导论拍死你啊!!!!!!!! 那是搞ACM的入门书啊!!!!特么的入门书就一千多页啊!!!!!!! 还没有习题答案啊,学完了你特么都不知道
2014-04-28 15:22:14
489
原创 hdu 2606 Renovation Problem hdu 2606
//看了冰学长的思路才明白// 当n>=3时可以全部由2x2的方砖镶嵌得到//eg:// 用 [**] 表示// [**] 一块2x2的方砖// n=15 时//[**][**][**][**][**][**][**] *//[**][**][**][**][**][**][**] *//* [**][**][**][**][**][**][**]
2014-04-28 15:10:10
681
原创 hdu 2686 Matrix (多线程dp)
//多线程dp 看起来就是记忆化搜索//两条路一起来个dfs()//dp[x1][y1][x2][y2] 记录两个点的坐标#include#include#define N 50#define max(a,b) ((a)>(b))?(a):(b);int mat[N][N];int dp[N][N][N][N],n;int d
2014-04-28 08:14:54
473
原创 hdu 3555(数位dp)
//数位dp很有用要好好掌握#include#include__int64 dp[30][10][k];//dp[i][j][k]表示i位首位为j(k==1 表示包含49 k=0 表示不包含49)的数有多少个void build(){__int64 i,j,k;memset(dp,0,sizeof(dp));dp[0][0][0]=1;
2014-04-16 12:54:27
392
转载 HDU 4283 You Are the One(区间dp)
//区间dp的用法真是灵活//这个题 想了很长时间 还是错了//下面的思路是参照大牛ZeroClock的// 思路: 栈有一个重要的性质就是 假设共有[1,n]元素 如果第一个元素第k个出栈则 元素2到k比第一个元素先出栈 元素k+1到n比第一个元素后出栈// 那么[1,n]就被分成了[2,k] [k+1,n]两个区间这样就可以用区间dp的三重循环的去做了//第一重循环i表示区
2014-03-08 17:01:04
494
转载 ZOJ Problem Set - 3469(区间dp)
//首先声明 本题思路代码都是抄袭大牛ZeroClock的//思路: 例如 1 2 X 4 5// 那么要给1 送饭必须先经过2 就是说必须先给内围的客人送饭 // 那么dp的区间就要从中间往两边慢慢推进 则dp[i][j][0]表示服务员送完i到j这个区间的客户的饭停留在左边 所有客户不满意度的最小和//
2014-03-05 15:01:14
586
原创 poj 1651(区间dp)
//很简单的区间dp//dp现在还不扎实 看了别人的思路才写出来的//思路: dp[i][j]表示i到j区间以最优方式取出中间的值后所得的最小值//假设k为i到j最后一次取出的卡片则 dp[i][j]=dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]; #include#include#define N 110in
2014-02-28 19:04:10
532
原创 USTC 1276(矩阵dp 二维化一维)
//自己想出来的方法 队友说是矩阵dp 那就这样叫吧//思路: 选一个宽度 和起始列对应的下标 取出对应的区域 求出取出区域内 的子矩阵的最大和 与当前最大和比较// 当取遍所有子矩阵的时候当前最大和 就是 此矩阵所有子矩阵的 最大和//eg:1 1 1 1 // 2 2 2 2// 3 3 3 3// 1 1 1 1//如果 l=2
2014-02-24 18:39:32
714
原创 366C - Dima and Salad(0-1 背包)
//0-1背包 比赛的时候想到c[i]=a[i]-b[i]*k的转化了 但是没想到用DP//转化后就是一列数c[] 取其中的任意几个 让它们的和为0 并且所对应的a[]的和最大值//c[i]的和的范围是-10000到10000//dp[i][j]表示从前i个数中任意挑出几个数 和为j的状态的所对应a[]的和的最大值//则dp[n][0]就是从n个数中选出任意个它们的和为0 所对应
2013-11-26 22:03:42
634
原创 149D - Coloring Brackets(区间DP 记忆化搜索)
//区间DP 记忆化搜索//虽然没做过记忆化搜索的题 也不知道什么是记忆化搜索//但见网上大神们都这样说 我也是看他们的思路那就这样叫吧//记忆化搜索 应该就是每搜到一种状态就把这种状态存起来 以后再用的时候就不用再去搜了//dp[i][j][c1][c2]表示i到j区间第i个括号染色为c1,第j个括号染色为c2的所有符合要求的情况数#include
2013-11-26 13:21:27
589
转载 区间DP
区间dp总结篇前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增、公共子序列写了个总结。反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报告都看不明白,而到了现在,遇到区间dp之类的题目,我不至于没有任何方向,慢慢的推导,有些题目没有自己想象的那么难,还是可以推导出转移方程的,有些题目,在自己推导过后,
2013-11-24 17:39:17
612
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人