poj 1192 最优连通子集 树状dp
2015-03-28 17:14
330 查看
//poj1192 // 求无根树中子树最大的权值设为value // dp[i][0]表示不选该节点时子树的value // dp[i][1]表示选择该节点时子树的value // 以j表示i的子节点。 // dp[i][0] = max (dp[i][0],max(dp[j][0],dp[j][1])); // dp[i][1] = sigma(max(dp[j][1],0)); // 与poj2342是有区别的,那个是父节点和子节点不能同时选。 // 这个可以选 // 初始化的时候应该把dp[i][1]置为point[i].v; //表示开始的时候直接照抄2342,结果wa了无数发。。。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=1008; struct Edge{ int v; int next; }edges[maxn<<1]; int n; int edgenum; struct node { int x; int y; int v; }point[maxn]; int dp[maxn][2]; int adj[maxn]; bool vis[maxn]; bool OK(int i,int j){ if(abs(point[i].x-point[j].x)+abs( point[i].y-point[j].y)==1) return true ; return false; } void addedge(int u,int v){ edges[edgenum].v=v; edges[edgenum].next=adj[u]; adj[u]=edgenum++; edges[edgenum].v=u; edges[edgenum].next=adj[v]; adj[v]=edgenum++; } void init(){ memset(adj,-1,sizeof(adj)); memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); edgenum=0; for (int i=0;i<n;i++){ scanf("%d%d%d",&point[i].x,&point[i].y, &point[i].v); } for (int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(OK(i,j)){ addedge(i,j); } } } } void dfs(int u){ vis[u]=true; dp[u][1]=point[u].v; for (int i=adj[u];i!=-1;i=edges[i].next){ int v = edges[i].v; if (!vis[v]){ dfs(v); dp[u][1]+=max(dp[v][1],0); dp[u][0] = max(dp[u][0],max(dp[v][0],dp[v][1])); } } } void solve(){ dfs(0); // int ans = 0; // for (int i=0;i<n;i++){ // int t = max(dp[i][0],dp[i][1]); // ans = max (ans,t); printf("%d\n",max(dp[0][0],dp[0][1])); // } // printf("%d\n",ans); } int main(){ freopen("G:\\Code\\1.txt","r",stdin); while(scanf("%d",&n)!=EOF){ init(); solve(); // print(); } }
相关文章推荐
- POJ1192最优连通子集(树状dp)
- POJ 1192 最优连通子集 (树形dp)
- poj 1192 最优连通子集(树形dp)题目好难懂。。。
- POJ - 1192 最优连通子集 (树形DP)
- POJ 1192 最优连通子集【树形DP】
- poj 1192最优连通子集(简单树形dp)
- POJ-1192 最优连通子集(树形DP入门+模板)
- POJ 1192 最优连通子集 最详细的题解 (无向树树形DP)
- POJ 1192 -最优连通子集 树形DP
- POJ 1192 最优连通子集(树上DP)
- POJ1192 最优连通子集(树形DP)
- poj 1192 最优连通子集 树状dp
- poj1192(记忆化搜索)最优连通子集
- POJ-1192 最优连通子集 动态规划
- poj 1192 最优连通子集
- poj 1192 最优连通子集
- poj 1192 最优连通子集 树的孩子兄弟表示法+简单树型dp
- poj 1192-最优连通子集解题报告
- 树状DP POJ 1192 最优连通图
- poj 1192 最优联通子集 简单dp