
poj 中级
Simmu
这个作者很懒,什么都没留下…
展开
-
poj 2528
离散化:之前不知道怎么样离散化省时,因为一直超时;然后我用了map,果断又超,之前想到用O(n*n)的遍历方法来做,但想到铁定会超,就没有这样做了。我的离散化是参考了网上的一部代码,其实核心是一样的,只是别人用了二维数组,而我用了结构体。首先,将开头和结尾存起来,但是在排序时是不分结尾和开始的,所以我们要先标记一下,也就是说将尾部用其数组的下标的负值来记录;然后用一个for循环搞定;(我最开始原创 2013-04-04 00:40:18 · 569 阅读 · 0 评论 -
poj 1947
题目连接:http://poj.org/problem?id=1947题意:给你一颗树,问去掉一个n个节点的子树所需要删除的最少边数。思路:可以简化处理:先求出对于每个点形成一个n个节点的树最少需要删除多少边,然后对于原树中的根,因为是它本身,所以不用+1,其他的因为还要切断与根的关系,要+1处理;对于求以每个节点为根的树形成只有n个节点所需删除最少的边数的问题。用树状dp来做;原创 2013-04-24 14:37:55 · 562 阅读 · 0 评论 -
poj 2486
题意:一个人在树的根上,求这个人在n步吃到的苹果数,每个节点给的都有一个苹果数,求所吃到的最大值。思路:树状dp。dp【i】【j】【0】表示在节点i上走了j步吃到的最大苹果数,并且返回了节点i;dp【i】【j】【1】表示在节点i上走了j步吃到的最大苹果数,但是没有回到节点i;状态转移方程: dp[i][j][0]=max(dp[next[nn][i原创 2013-04-25 11:46:31 · 666 阅读 · 0 评论 -
poj 1925
http://poj.org/problem?id=1925题意:从一个建筑物像蜘蛛侠一样飞到另外一个建筑物。求最小的跳跃次数;思路:dp。对x(距离)进行dp,记录跳跃次数;每经过一个建筑物,就对它可以跳到的距离范围的点的跳跃次数进行更新;注意:求距离有可能会爆int。我也是看了discuss才知道的。哎,还得自己独立ac啊。代码:#include#include#i原创 2013-04-29 23:59:50 · 542 阅读 · 0 评论 -
poj 3254
题意:有几个农田,每个农田可以放一个牛,但牛之间不能相邻,问最多有多少种方法;思路:用状态dp;首先筛选出本身符合条件的状态并记录;然后用状态转移方程:if(k&j==0)dp[i][j]+=dp[i-1][k];代码:#include#include#includeusing namespace std;__int64 mark[20];int s[10原创 2013-05-04 13:26:26 · 377 阅读 · 0 评论 -
poj 2411
题意:给你1*2和2*1两种方块,在一个n*m的大的方块中能够有多少种排法;思路:状态dp;将空出来的设为0,被填的设为1;用递归来做;#include#include#includeusing namespace std; __int64 dp[2][2<<11];int i,j,m,n,t;void dfs(int d,int mm){ if(d==m原创 2013-05-04 13:57:38 · 420 阅读 · 0 评论