ACM_DP
文章平均质量分 72
ACM_sjtsjt
不忘初心 追求美好
展开
-
hdoj 4405 Aeroplane chess(概率dp)
Aeroplane chessProblem DescriptionHzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have si原创 2016-02-11 03:02:56 · 265 阅读 · 0 评论 -
hdu4824 双调TSP问题
学习资料转载自:http://www.cnblogs.com/Rojo/p/4062522.html欧几里得旅行商问题是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题。如图(a)给出了一个7个点问题的解。这个问题的一般形式是NP完全的,故其解需要多于多项式的时间。 J.L. Bentley 建议通过只考虑双调旅程(bitonic tour)来简化问题,这种旅程即为从最左点开原创 2016-05-17 22:39:33 · 1172 阅读 · 0 评论 -
hdu 1693 插头dp
前排推荐cdqppt 基于连通性状态压缩的动态规划问题虽然没通过ppt完全看懂dp过程 但知道了插头和轮廓线两个概念插头表示相邻格子的连接状态 轮廓线分割开了已决策和未决策#include#include#includeusing namespace std;#define ll __int64const int N=(1<<12)+10;int n,m,g[12][12]原创 2016-05-18 23:13:38 · 299 阅读 · 0 评论 -
【hdu】4521 小明系列问题——小明序列【LIS变种】
题意:求最长上升子序列,其中子序列中相邻的两个数的下标差要超过k题解:英语不好读题都读不好 之前看成了子序列中相邻的两个数的大小要超过k怎么都做不对后来lower_bound写成了upper_bound记住了最长上升子序列如果要求严格上升的话就是lower_bound 可以相等的话就是upper_bound子序列中相邻的两个数的下标要超过k,要想满足这个条件我们可以按下面的原创 2016-06-26 23:52:47 · 922 阅读 · 0 评论 -
【hdu】2369 Bone Collector II【kth背包】
题意:背包问题,求第k大题解:题意很简单,普通的背包问题,关键是求第k大,我们就把普通的背包新增一维dp[i][j]记录背包容量为i的时候第j大的价值为dp[i][j],对于每一件物品A数组记录取了这件物品之后的前k大价值,B数组记录不取这件物品的前k大价值,然后把AB数组合并去重取前k个记录下来就可以了,这样可以保证答案的正确性#include#includeusing na原创 2016-06-28 22:23:07 · 352 阅读 · 0 评论 -
【hdu】1520 Anniversary party【树形dp】
题意:一群人种有上下属关系,构成了一棵树,每个人都有一个价值,直接的上下属不能被加入同一个集合,问一个集合最大能有多少价值题解:赤裸裸的树形dp,这是我系统的开始学树形dp的第一道题,算是领略了一些树形dp的要点dp[i][0]记录不取i节点所能得到的在以i节点为根的子树中所能取得的最大价值,dp[i][1]记录取i节点以i节点为跟所能取得的最大价值遍历i的儿子 dp[i][0原创 2016-06-28 22:33:47 · 265 阅读 · 0 评论 -
【uva】624 CD【背包记录路径】
题意: 背包+路径记录题解: 用一个vis[i][j]记录容量为j的背包里面有没有用到过i物品,物品是倒着放的,具体实现看代码#include#includeusing namespace std;const int N=10005;int cd[25],dp[N],v[25];bool vis[25][N];int main(){ int i,j原创 2016-06-29 10:43:50 · 376 阅读 · 0 评论 -
【hdu】2196 Computer【树形dp】
题意:给出一棵树,树上边的长度不同,问树上的每个节点到别的节点的最远距离是多少题解:树形dp的经典应用,一个节点b的最长距离有三种情况,1.来自他的子树2.与他父节点距离最大的节点+他与他父节点的距离第二种情况分为两种3.是与他父节点距离最大的节点在以父节点为根的子树中4.来自以父节点为根的子树之外的树上面3.中如果节点b在这条最长路中的话就不行了,所以我们还要记下父节点的第二原创 2016-06-29 11:14:47 · 368 阅读 · 0 评论 -
【hdu】4352 XHXJ's LIS【状压+数位dp】
题意:题目这么长,其实就是找出区间内如果把数字看成一个阿拉伯数字的集合的话,这个集合中最长严格上升子序列的长度为k的个数题解:主要是如何储存之前的状态比较难想,考虑到有0-9十个数字和nlogn的LIS求法,我们可以用状态s表示当前哪些数字是在求LIS的那个数组中的,然后每新加一个数,就更新状态s,这种状态s的更新可以预处理出来,其他的就和普通的数位dp一样了#include#inclu原创 2016-07-12 10:06:08 · 454 阅读 · 0 评论 -
【cf】55d beautiful numbers【精妙的数位dp+离散化】
题意:求1-n中,能被所有组成他的非0数整除的数的个数题解:题意很简单,但是考虑到数位dp的状态转移,dfs(pos,pre,status,limit)如果要记录除以他所有数那么势必要用数组来存,但这样一来,很难用dp数组来记录当前状态,这题非常巧妙的采用了lcm的方法,避免了该类操作,2-9的lcm是2520,这样我们只要记录前面数字的lcm和前面数字模2520剩下的数,那么既保证了原创 2016-07-05 09:58:51 · 1272 阅读 · 0 评论 -
【hdu】3001 Travelling【三进制状压dp】
题意:n个点m条边的图,任意选择起点,要求经过每个点不超过两次,求遍历全图的最小cost题解:普通状压dp2进制压缩,这个题三进制压缩0表示未经过1表示经过一次2表示经过两次,因为三进制不同于二进制,所以预先处理状态在三进制状态下每一位的值,dp[i][j]记录当前状态为i最后一个到达节点为j的最小cost 状态转移方程dp[i+state[k]][k]=min(dp[i][j]+g[j]原创 2016-05-31 01:48:40 · 507 阅读 · 0 评论 -
hdu 4906 状压dp
题意:给出n,k题解:看到k状态转移方程next=(1#include#include#include#include#define ll __int64using namespace std;const ll mod=1e9+7;ll dp[1<<21],v;int main(){ int T,n,k,l,MIN,SIZE,d,i,j,p; scan原创 2016-05-31 00:03:34 · 310 阅读 · 0 评论 -
hdu 5045 状压dp
因为所有人做题数量差不能大于1 所以可以把每n道题看成一组 每一组必须由每个人完成一道的方式完成dp[i][j] i代表当前题数 j代表当前队员状态#include#include#includeusing namespace std;double dp[1005][1050],r[11][1005],ans,tmp;int T,n,m,i,j,first,t,k,MAX,kas原创 2016-05-24 23:36:32 · 230 阅读 · 0 评论 -
hdoj 4336 card collector(状态压缩dp求数学期望)
Card CollectorProblem DescriptionIn your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, for example, if you collect all the 108 people in the famous no原创 2016-02-11 19:14:20 · 286 阅读 · 0 评论 -
hdoj 5617 Jam's maze(滚动数组dp求回文数)
Jam's mazeProblem DescriptionJam got into a maze, he has to find a palindrome path from (1,1) to (N,N) to get out.However he is not only thinking about how to get out of the maze,but also原创 2016-02-10 02:34:14 · 356 阅读 · 0 评论 -
hdu 检测赛 Problem C(状压dp)
Problem CProblem Description新年伊始,集训队迎来了15级新生。教练打算将大家N(2Input多组用例,处理到EOF对于每组用例:第一行 N接下来的N行,每行N个数第i行第j个数表示i和j分到两个队时彼此的思念值第i行第j个数等于第j行第i个数,当i=j时,思念值为0Output思念值总值的最大值Sample Input原创 2016-03-03 11:52:41 · 301 阅读 · 0 评论 -
hdu 1503 Advanced Fruits(最长公共子序列+路径记录)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503最长公共子序列+路径记录#include#includeusing namespace std;const int N=105;int dp[N][N],pre[N][N];char s1[N],s2[N];void out(int i,int j){ if(i==0&&原创 2016-03-17 21:09:51 · 363 阅读 · 0 评论 -
hdu 3182 Hamburger Magi(状压dp)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3182预处理+dp#include#include#includeusing namespace std;const int N=15;int val[N],cost[1<<N],energy[N],last[N];int dp[1<<N];int n,m;void init(){原创 2016-03-19 14:51:50 · 437 阅读 · 0 评论 -
hdu 2089 不要62(数位dp)
不要62Problem Description杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有4或62的号码。例如:62315 73418 88914都属于不吉利号码。但是,6原创 2016-02-23 00:54:53 · 268 阅读 · 0 评论 -
hdu 4571 Travel in time(floyd+dp)
链接http://acm.hdu.edu.cn/showproblem.php?pid=4571距离上的cost用floyd算是否停留用dp求最后遍历dp[i][j]搜索答案#include#include#includeusing namespace std;typedef struct{ int c,s,num;}Point;int g[105][105]原创 2016-03-21 23:35:43 · 368 阅读 · 0 评论 -
hdu 3920 状压dp
题意:2n个敌人需要杀死,分布在地图上的不同位置,每次能杀死2个人,代价为本人与敌人1距离+敌人1与敌人2距离思路:状态压缩dp 状态o每位代表一个敌人0未杀死1杀死 直接一维dp枚举#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;double dp[1<<20],dist原创 2016-05-24 22:56:22 · 323 阅读 · 0 评论 -
hdu 4114 状压dp floyd
dp[s1][s2][i] s1为当前必达景点状态 s2为当前拥有钥匙状态 i为当前到达节点原创 2016-05-24 23:26:05 · 344 阅读 · 0 评论 -
【hdu】1011 Starship Troopers【树形背包】
【题意】:有一颗树,树的节点编号为1-n,1为根节点,每个节点上会有x个敌人,y个宝藏,现在你从1号节点出发,率领m个友方单位,只有攻占了父节点才能继续攻占子节点,如果你在一个节点的兵力*20>=敌人数,你就可以得到这个节点中的宝藏,并且这些士兵就永久驻扎在这个节点了,并且所有士兵不能走回头路(注意这个条件非常重要,我在这里WA了2次,这个条件就意味着,就算每个节点的敌人数量都是0,也至少需要一个原创 2016-08-13 03:45:56 · 383 阅读 · 0 评论