摘要: 题意: Alice 和 Bob在一颗树上轮流走,知道了每条边的长度,Alice想走的权值和尽量小,Bob想走尽量大,同时所走的权值和必须在[L, R]这个给定的区间内, Bob先走,问Bob 能得走的最大的权值和是多少? 如果还能走,Alice就不能停下来。分析: dp[r] 表示到节点 r 的最优值,从叶子递归,Alice选每次最小走,Bob选最大走,d[u]表示从跟到节点u的距离, d[u]+dp[t]+cost(u, t) 必须在[L, R]之间才转移#include<stdio.h>#include<string.h>#define INF 0x1f1f1f1f 阅读全文
posted @ 2012-09-13 23:48 'wind 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 题意: 一个有 N 个节点的树形的地图,知道了每条变经过所需要的时间,现在给出时间T,问能不能在T时间内从 1号节点到 N 节点。每个节点都有相对应的价值,而且每个价值只能被取一次,问如果可以从1 号节点走到 n 号 节点的话,最多可以取到的最大价值为多少。分析:先求出从 1 号节点到 n 号节点的最短路,如果花费大于时间 T,则直接输出不符合, 将最短路上的权值全部赋值为 0, 在总时间 T 上减去 最短路的长度,表示最短路已经走过,对其它点进行树形背包求解, 需要注意的是如果不是最短路上的边都要走两次,即走过去还要再走回来, 状态转移方程: dp[i][j]=max(dp[i][j],dp 阅读全文
posted @ 2012-09-13 20:14 'wind 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 n 个电灯泡,知道了每个电灯泡的坐标和覆盖半斤,为最多可以去掉多少电灯泡使得 1,2,3,号电灯泡的灯光任然相连。分析: 分别以 1,2,3为源点求最短路,找到一个点到这三个点的距离和最小值sum,答案即为 n - sum - 1#include<stdio.h>#include<queue>#include<string.h>using namespace std;#define INF 0x1f1f1f1f#define clr(x)memset(x,0,sizeof(x))#define maxn 205struct node{ int t 阅读全文
posted @ 2012-09-13 00:55 'wind 阅读(230) 评论(0) 推荐(0) 编辑