RQNOJ 188 购物问题:树形dp
题目链接:https://www.rqnoj.cn/problem/188
题意:
商场以超低价格出售n个商品,购买第i个商品所节省的金额为w[i]。
为了防止亏本,有m对商品是不能同时买的。但保证商品关系不出现环,不会出现如:(1,2) , (2,4) , (1,4)。
问你最多能节省的金额。
题解:
简直和POJ 2342 Anniversary party像极了(*/ω\*)
将不能同时买的商品间连一条无向边。
所以子节点和父节点不能同时选。
唯一不同的是POJ是一棵树,而这道题是一片森林。需要对于每一棵树分别求dp,然后求和。
表示状态:
dp[i][j] = max discount
i:考虑到第i个商品(节点i)
j:是否选节点i (j == 0 / 1)
找到答案:
ans = ∑ max(dp[root[i]][0],dp[root[i]][1]) (root[i]为每棵树的根)
如何转移:
dp[i][1] = sigma dp[son][0] (选父节点)
dp[i][0] = sigma max dp[son][0/1] (不选父节点)
在dfs中:
dp[now][1] = w[i]
dfs(nex...)
dp[par][1] += dp[now][0]
dp[par][0] += max(dp[now][0], dp[now][1])
边界条件:
dp[i][1] = w[i] (至少选自己)
dp[i][0] = 0
AC Code:
// state expression:
// dp[i][j] = max discount
// i: considering ver i
// j: whether to select j ver
//
// find the answer:
// max dp[root][0/1]
//
// transferring:
// dp[i][1] = sigma dp[son][0]
// dp[i][0] = sigma max dp[son][0/1]
// dfs:
// dp[now][1] = w[i]
// dfs(nex...)
// dp[par[now]][1] += dp[now][0]
// dp[par[now]][0] += max(dp[now][0], dp[now][1])
//
// boundary:
// dp[i][1] = w[i]
// dp[i][0] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX_N 1005 using namespace std; int n,m;
int a,b;
int ans;
int w[MAX_N];
int dp[MAX_N][];
bool vis[MAX_N];
vector<int> edge[MAX_N]; void read()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>w[i];
}
for(int i=;i<m;i++)
{
cin>>a>>b;
edge[a].push_back(b);
edge[b].push_back(a);
}
} void dfs(int now,int par)
{
vis[now]=true;
dp[now][]=w[now];
for(int i=;i<edge[now].size();i++)
{
int temp=edge[now][i];
if(temp!=par) dfs(temp,now);
}
if(par!=-)
{
dp[par][]+=dp[now][];
dp[par][]+=max(dp[now][],dp[now][]);
}
} void solve()
{
memset(dp,,sizeof(dp));
memset(vis,false,sizeof(vis));
ans=;
for(int i=;i<=n;i++)
{
if(!vis[i])
{
dfs(i,-);
ans+=max(dp[i][],dp[i][]);
}
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
RQNOJ 188 购物问题:树形dp的更多相关文章
- vijos 1313 金明的预算方案 树形DP
描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今天一 ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
- POJ2342 树形dp
原题:http://poj.org/problem?id=2342 树形dp入门题. 我们让dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去 ,根据题意我们可以很容易的得到如下递推公式 ...
- hdu1561 The more, The Better (树形dp+背包)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1561 思路:树形dp+01背包 //看注释可以懂 用vector建树更简单. 代码: #i ...
随机推荐
- [Python] SQLBuilder 演示样例代码
用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...
- 环信ONE SDK架构介绍
环信ONE SDK架构介绍 摘要 环信即时通讯SDK自2014年6月正式公布2.0版本号至今已走过一个年头.从主要的单聊功能,到群聊功能,再到聊天室的实现.SDK无论是功能.稳定性,还是易集成性都在一 ...
- 我如何添加一个空目录到Git仓库?
新建了一个仓库,只是创建一些目录结构,还不里面放什么,要放的内容还没有,还不存在,应该怎么办呢? Git 是不跟踪空目录的,所以需要跟踪那么就需要添加文件! 也就是说 Git 中不存在真正意义上的空目 ...
- VM tools安装错误The path "" is not a valid path to the xx generic kernel headers.
在网上搜索非常多解决方式.并不适用于我的问题,最后通过下面步骤解决: 1. 更新软件源(防止build-essential不能 安装),然后安装build-essential和linu-headers ...
- 多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)
一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...
- anaconda3.5 3.6 2.7
https://repo.continuum.io/archive/ Filename Size Last Modified MD5 Anaconda2-5.0.1-Linux-x86.sh 413. ...
- python创建迅雷批量任务
其实不是真的创建了批量任务,而是用python创建一个文本文件,每行一个要下载的链接,然后打开迅雷,复制文本文件的内容,迅雷监测到剪切板变化,弹出下载全部链接的对话框~~ 实际情况是这样的,因为用py ...
- 搜狐新闻APP是如何使用HUAWEI DevEco IDE快速集成HUAWEI HiAI Engine
6月12日,搜狐新闻APP最新版本在华为应用市场正式上线啦! 那么,这一版本的搜狐新闻APP有什么亮点呢? 先抛个图,来直接感受下—— 模糊图片,瞬间清晰! 效果杠杠的吧. 而藏在这项神操作背后的 ...
- php正则表达式匹配img中任意属性的方法
经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码代码如下: < ...
- js关闭浏览器事件,js关闭浏览器提示及相关函数
关于浏览器关闭事件的相关描述 有些朋友想在浏览器关闭的时候,弹出alert .confirm或者prompt等.实验证明,这种做法是失败的,原因是浏览器关闭事件自动屏蔽执行js的某些方法,从而防止恶意 ...