上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 61 下一页
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837思路:状态压缩+记忆化搜索。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define FILL(a,b) memset(a,b,sizeof(a)) 7 8 int dp[1<<17],map[17][17]; 9 int n;10 11 int dfs(int state,int m)12 {13 if(state==0)return 0;14 阅读全文
posted @ 2013-10-04 11:06 ihge2k 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1463思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 2222 8 #define FILL(a,b) memset(a,b,sizeof(a)) 9 10 int n,dp[MAXN][2];11 vectorg[MAXN];12 13 int dfs(int u,int 阅读全文
posted @ 2013-10-04 09:28 ihge2k 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2378思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 11111 8 #define FILL(a,b) memset(a,b,sizeof(a)) 9 10 int n,num[MAXN];11 bool mark[MAXN];12 vector >g;13 14 int df 阅读全文
posted @ 2013-10-03 21:29 ihge2k 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25830‘思路:类似与数塔问题,自底向上处理,输入的时候稍微注意一下就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 222 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 9 int g[MAXN][MAXN],dp[MAXN][MAXN];10 int n;11 12 int main()13 . 阅读全文
posted @ 2013-10-03 19:53 ihge2k 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26882思路:一开始把题意理解错了,还以为是简单路径,然后仔细一看发现是一条路径,意思就是说从起点出发,把所有的点走一遍,于是就要考虑强连通分量,因为对于同一个强连通分量的点是相互可达的,于是我们可以先缩点,建新图,统计新图中顶点的入度与出度的关系,判断即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #inc... 阅读全文
posted @ 2013-10-03 17:00 ihge2k 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1935思路:首先我们考虑从源点出发到所有自己想要经过的点然后在回到源点sum,显然每条边都必须经过源点(这个我们可以一次dfs求出),但题目的意思是可以不用回到源点,那么我们可以再求源点到所有要经过的点的最远距离ans,于是答案便是sum-ans. 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 55555 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 9 struct E. 阅读全文
posted @ 2013-10-03 15:10 ihge2k 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2486思路:经典的树形dp,想了好久的状态转移。dp[i][j][0]表示从i出发走了j步最后没有回到i,dp[i][j][1]表示从i出发走了j步最后回到i。于是我们把所有到情况归结为3种:1、从u(v是其中一颗子树)出发,走了j步,最后停在了v,则有dp[u][j+1][0]=max(dp[u][j+1][0],dp[u][j-k][1]+dp[v][k][0]);(从u->v多走了1步).2、从u出发,走了j步,最后停在了u的另一棵子树上,则有dp[u][j+2][0]=max(dp[u][j+2][0],dp[u][ 阅读全文
posted @ 2013-10-03 11:15 ihge2k 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25911思路:强连通缩点,在新图中找入度为0的点的个数即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 using na... 阅读全文
posted @ 2013-10-02 23:04 ihge2k 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3140思路:简单树形dp题,dp[u]表示以u为根的子树的人数和。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 using namespace std;15 #define MAXN 11111116 #define inf 1PP;20 template inline T Get_MIN 阅读全文
posted @ 2013-10-02 20:19 ihge2k 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662思路:典型的树形dp,处理的时候类似于分组背包,dp[i][j]代表以i为根的树取j个分支获得的最大值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 111 8 9 struct Edge{10 int v,w;11 Edge(){}12 Edge(int vv,int ww):v(vv),... 阅读全文
posted @ 2013-10-02 19:22 ihge2k 阅读(348) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 61 下一页