2011年5月10日

poj 3659

摘要: 有意思的树形dp代码:#include<iostream>#include<fstream>using namespace std;int n;struct e{ int data; e *next;};e edge[10001];int dp[10001][3];int v[10001];void solve(int s){ int i,j,k; v[s]=1; e *p=edge[s].next; dp[s][1]=1; dp[s][0]=0; dp[s][2]=10000000; if(!p) return; k=-1000000; int f=0; dp[s][ 阅读全文

posted @ 2011-05-10 14:24 宇宙吾心 阅读(422) 评论(0) 推荐(0)

poj 3140

摘要: 简单题代码:#include<iostream>#include<fstream>#include<vector>using namespace std;vector<long long> edge[100001];long long value[100001];int v[100001];long long dp[100001];long long n,m;long long ok(long long s){ if(s<0) return -s; return s;}long long solve(long long s){ long l 阅读全文

posted @ 2011-05-10 13:40 宇宙吾心 阅读(279) 评论(0) 推荐(0)

poj 1155

摘要: 树形dp大意:某电台要广播一场比赛,该电台网络是由N个网点组成的一棵树,其中M个点为客户端,其余点为转发站。客户端i愿支付的钱为pay[i],每一条边需要的花费固定,问电台在保证不亏损的情况下,最多能使多少个客户端接收到信息?广播台所在的节点编号为1分析:树形DP1.user[i].dp[j]表示从转发站i开始计算,满足其子树中j个顾客的最大报酬 分析节点i的孩子节点s a.放弃该孩子s,值不变 b.取该孩子的若干的节点:user[i].dp[j-k]+user[s].dp[k]-cost[i][j](cost[i][j])为 连通该边所需要付出的代价。 综上: user[i].dp[j]=m 阅读全文

posted @ 2011-05-10 13:15 宇宙吾心 阅读(986) 评论(1) 推荐(0)

导航