poj 1192(简单树形dp)
题意:这题描述看似很复杂, 其实读懂后就是一个相邻点之间连通问题,水题。
解题思路:首先把相邻的点连接起来建立一棵树,dp[i][0]表示不选择i节点可以得到的最大价值,dp[i][1]表示选择i节点可以得到的最大价值。状态方程很简单,详见代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn = 1001;
struct Edge
{int to,next;
}edge[maxn<<1];
struct Node
{int x,y,cost;
}point[maxn];
int n,cnt,pre[maxn],dp[maxn][2]; //dp[i][0]表示不选i节点,dp[i][1]表示选i节点void addedge(int u,int v)
{edge[cnt].to = v;edge[cnt].next = pre[u];pre[u] = cnt++;
}void dfsDP(int u,int fa)
{dp[u][1] = point[u].cost;dp[u][0] = 0;int tmp = 0; //tmp记录其子节点都不选择的和for(int i = pre[u]; i != -1; i = edge[i].next){int v = edge[i].to;if(fa == v) continue;dfsDP(v,u);dp[u][0] = max(dp[u][0],dp[v][1]); //如果u不选,那么其子节点最多选择一个tmp += dp[v][0];dp[u][1] += max(dp[v][0],dp[v][1]); //如果选择u,那么其子节点可选可不选}dp[u][0] = max(dp[u][0],tmp); //考虑u的所有子节点都不选
}int main()
{while(scanf("%d",&n)!=EOF){memset(pre,-1,sizeof(pre));cnt = 0;for(int i = 1; i <= n; i++)scanf("%d%d%d",&point[i].x,&point[i].y,&point[i].cost);for(int i = 1; i <= n; i++)for(int j = i + 1; j <= n; j++)if(abs(point[i].x - point[j].x) + abs(point[i].y - point[j].y) == 1){addedge(i,j);addedge(j,i);}dfsDP(1,0);printf("%d\n",max(dp[1][0],dp[1][1]));}return 0;
}
poj 1192(简单树形dp)相关推荐
- Tree Cutting POJ - 2378(树形DP)
题意:有n个谷仓有n-1条路连接,问最少删除哪几个点才能使得删除点后得到的连通图的加点数不大于n/2. 分析:求树的重心的变形题,poj3107的简单版,一遍dfs从叶子到根转移找出找到以每个节点为根 ...
- The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))
思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...
- poj 3280(简单区间dp)
题意:将一个字符串转换成回文串的最小花费. 解题思路:简单的区间dp,dp[i][j]表示从i到j的字符串转换成回文串的最小化费. #include<iostream> #include& ...
- POJ 2152 Fire(树形DP)
题意: 思路:令F[i][j]表示 的最小费用.Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用. 好难的题... 1 #include<algorithm> 2 # ...
- POJ3345 Bribing FIPA 【背包类树形dp】
题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cm ...
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
传送门:https://www.luogu.org/problemnew/show/P1131 题目大意 给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共 ...
- POJ 1192 最优连通子集(树形DP)
最优连通子集 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1649 Accepted: 855 Description ...
- 简单的树形dp NOJ376 小强的Linux
树形dp是建立的树的基础上的有二叉和三叉等等树,现在学到的知识很简单的树形dp,但还是要注意深搜时要标记避免已经搜素得到过的结果可以直接用了不用在浪费时间去搜素了.还有就是对根节点的处理. 点击打开链 ...
- POJ - 4045 Power Station(树形dp/树的重心)
题目链接:点击查看 题目大意:给出一个n个节点的树,我们需要选出一个节点,到其余任何节点的距离和最小 题目分析:这个题我的第一反应是用树的重心,先求出来符合条件的点,然后再跑一遍dfs求距离,最后输出 ...
最新文章
- Python中的id()函数_怪异现象
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
- 实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)
- 2021牛客暑期多校训练营3 B-Black and white(思维+最小生成树)
- cmake 学习笔记(一)
- Go语言学习笔记 - PART13 - 协程与通道
- wordpress黑镜2.0作品图片素材类网站模板
- Mutex(互斥锁)
- serializable接口_面试官:RandomAccess这个空接口有何用?
- 安装Editplus软件
- Oracle 后台进程详解
- C++实现排列组合问题
- 高中上计算机专业用买电脑吗,我是高中毕业生,要上大学该买什么电脑?
- 【BP数据预测】斑点鬣狗算法优化BP神经网络数据预测【含Matlab 219期】
- UVC webcam添加H264 NV12等格式支持
- 企业云邮箱申请,TOM企业邮箱,2021不见不散
- ini文件全部写入时换行符号未写入的问题处理
- 如何在App中实现朋友圈功能之六快速实现下拉加载朋友圈功能——箭扣科技Arrownock
- [笔记][总结] MIT线性代数 Gilbert Strang 正交矩阵
- C#上位机通过TCP/IP完全控制YAMAHA四轴机器人开发
热门文章
- mysql pool返回值_Mysql成神之路-InnoDB 的 Buffer Pool
- 周报速递丨百度与美团等互联互通;京东Shopify达成合作
- 神策数据张何津:构建银行数字化运营体系,赋能业态新发展
- 车主无忧:天下武功,唯快不破,神策让我们快人一步
- linux与windows下tomcat的java内存设置
- web工作流管理系统开发之十九 工作流系统的事务处理
- 使用|DataDirectory| 的烦恼
- How to apply for the PG studies as a UG
- 转载 用ShadowVolume画模型的影子
- 2018.8.14-C#复习笔记总