随笔分类 - Poj
poj 2385 Apple Catching
摘要:http://poj.org/problem?id=2385和天上掉馅饼那个差不多。dp[i][j]表示第i分钟移动了j步。一开始直奔馅饼的那个想法,所以就需要三唯的: i 第几分钟 ,j 哪个位置 ,k 移动了几步但是本题 只要两个位置 ,所以可以用k来表示了j所以就有了状态转移方程:dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+t[i][(j+1)%2];另外要注意初始化:View Code #include<iostream>#include<string.h>#include<stdio.h>#include<al
阅读全文
poj 1463 Strategic game
摘要:http://poj.org/problem?id=1463有两种做法,一种是二分图,一种是树形DP,这里两种都做了。二分图的。就是经典的二分图最小点覆盖,要选取最小的点,使得所有的边与这些点关联,(可以一条边关联两个点,为了需要哟)那么我们建的是无向边,因为可以互相关联,还是利用经典的拆点思想,本来要若原图中i与j有边。我们要连的是i到j+n,j到i+n,但这样连的效果和i与j连,j与i连是一样的。所以为了节省空间,我们这样连然后就是匈牙利算法,求最小点覆盖=最大匹配数View Code #include<iostream>#include<string.h>#inc
阅读全文
poj 3211 Washing Clothes
摘要:http://poj.org/problem?id=3211一个背包的简单应用。我们可以这样想,对于同一种颜色的衣服,把他们的总时间t算出来,那么做一个容量为t/2的背包,背包里放的是这种颜色的衣服,重量是洗这件衣服的时间,价值也是洗这件衣服的时间,那么洗这种颜色的衣服的所需最小时间就是 max(t-dp【t/2】,dp【t/2】)用g++交才能过,c++不行,这是怎么个回事??View Code #include<iostream>#include<string.h>#include<string.h>#include<stdio.h>#inc
阅读全文
poj 1330 Nearest Common Ancestors
摘要:http://poj.org/problem?id=1330这个是tarjian离线的版本:对于一个父亲的所有孩子。我们都去递归Lca。如果当前点是要询问的那个两个点中的一个而且另外一个已经访问过了。就输出。方法一:Tarjan离线算法 在学习离线算法的时候先需要先巩固一下深度搜索,并查集 Tarjan离线算法是基于深度优先搜索的,我们从根开始向下搜索,搜到一个节点的时候首先判断该节点所有子节点是否访问过,如果都已经访问过,则判断该节点是否询问点里面的其中一个,如果是,则判断跟它相对应的那个点是否已经访问过,如果访问过,则他们的最近公共祖先便是已经访问过的那个节点的当前节点,如果另外一个节点没
阅读全文