czy的后宫5

题目描述 Description

\(czy\) 要召集他的妹子,但是由于条件有限,可能每个妹子不能都去,但每个妹子都有一个美丽值,\(czy\) 希望来的妹子们的美丽值总和最大(虽然……)。
\(czy\) 有一个周密的电话通知网络,它其实就是一棵树,根结点为\(czy\) ,他可以通知一些妹子(毕竟他不认识他的所有妹子嘛),称为他的下线(也就是儿子节点),下线们继续通知自己的下线。任何妹子都可以不去,但是任何一个妹子如果要去,则她的上线(也就是她的父亲节点)一定要去。
为了使妹子美丽值总和最大,\(czy\) 想安排一下,(非强制)让一些妹子去。但是妹子数很多,人脑是难以应付的,所以他想让你用电脑解决。

输入描述 Input Description

输入第一行两个整数\(n\)\(m\) 表示有\(n\) 个妹子,至多只能去\(m\) 个妹子。(\(1<=m<=n\) )
接下来\(2*n\) 行,每两行代表一个妹子的信息(如果这个妹子没有子节点,就只有一行)。
每个妹子的第一行两个整数\(p\)\(s\) ,表示这个妹子美丽值为\(p\) ,子节点个数\(s\) ;(\(-100<=p<=100\) )
第二行s个整数,表示这个妹子的子节点的编号。\(czy\) 的编号一定为1。

输出描述 Output Description

输出一个整数,表示权值的最大值。

样例输入 Sample Input

8 5
100 2
2 3
79 2
4 5
109 3
6 7 8
100 0
100 0
100 0
101 0
108 0

样例输出 Sample Output

518

数据范围及提示 Data Size & Hint

对于20%数据\(1<=n<=10\)
对于60%数据\(1<=n<=100\)
对于100%数据\(1<=n<=1000\)

之前的一些废话

做了一些的题,但是一直没有整理。

题解

一个类似树形DP的背包DP,设\(dp[i][j]\) 表示到了i节点,已经选了j个物品的最大收益,可以转移到子节点\(dp[v][j+1]=max(dp[v][j+1],dp[i][j]+w_v)\) ,然后递归下去,然后把之前子节点的\(dp\) 值来更新当前节点的\(dp\) 值,方便转移到下一个子节点。

代码

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define mem(a,b) memset(a,b,sizeof(a))
inline int read()
{int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
const int maxn=1010;
int n,m,first[maxn],ce=-1,w[maxn],a,b,root,dp[maxn][maxn],ans;
bool rt[maxn];
struct Edge
{int u,v,next;Edge() {}Edge(int _1,int _2,int _3):u(_1),v(_2),next(_3) {} 
}e[maxn<<1];
void addEdge(int a,int b)
{e[++ce]=Edge(a,b,first[a]);first[a]=ce;e[++ce]=Edge(b,a,first[b]);first[b]=ce;
} 
void dfs(int now,int fa)
{for(int i=first[now];i!=-1;i=e[i].next)if(e[i].v!=fa){for(int j=1;j<m;j++)if(dp[now][j])dp[e[i].v][j+1]=max(dp[e[i].v][j+1],dp[now][j]+w[e[i].v]);dfs(e[i].v,now);for(int j=1;j<=m;j++)dp[now][j]=max(dp[now][j],dp[e[i].v][j]),ans=max(ans,dp[now][j]);}
}
int main()
{mem(first,-1);n=read();m=read();for(int i=1;i<=n;i++){w[i]=read();a=read();for(int j=1;j<=a;j++)b=read(),addEdge(i,b),rt[b]=1;}for(int i=1;i<=n;i++)if(!rt[i]){root=i;break;}ans=dp[root][1]=w[root];dfs(root,0);printf("%d\n",ans);return 0;
}

总结

做DP时候应该养成一个这样的习惯,要从合法的地方转移,譬如上面的代码中如果不加if(dp[now][j])就有可能出一些问题。

转载于:https://www.cnblogs.com/FYH-SSGSS/p/7761788.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Use ‘docker scan‘ to run Snyk tests against images to find vulnerabilities and learn how to fix th

Use docker scan to run Snyk tests against images to find vulnerabilities and learn how to fix them 解决方案 执行如下命令 export DOCKER_SCAN_SUGGESTfalse

上传附件删除、session清空问题

最近因为项目的需要&#xff0c;将客户端附件上传至服务器&#xff0c;附件上传的位置是IIS目录下的文件夹&#xff0c;经过处理之后。必须将该附件删除。 程序发布之后,使用该功能&#xff0c;结果项目无法运行。必须要重新启动IIS才可以重新运行整个项目。因为项目中的Sessio…

浅谈Junit4和TestNG中的参数化测试

最近在看Junit4的相关知识&#xff0c;由于本身做的是自动化方面的测试&#xff0c;所以工作上着重于应用TestNG。恰好遇到了一个将case进行参数化的需求&#xff0c;故在此记录Junit4和TestNG在参数化方面的区别。 一、Junit4和TestNG的注释支持 特点JUnit 4TestNG测试注释Tes…

使用docker查看和删除虚悬镜像

虚悬镜像是REPOSITORY和TAG为<none>的镜像 none镜像(虚悬镜像),那是因为 构建镜像过程中因为脚本错误导致很多镜像构建终止&#xff0c;产生很多none标签的版本 手动构建镜像的时候没有进行提交&#xff0c;遗留来的垃圾镜像 这些镜像占据较大的存储空间&#xff0c;需要…

局部变量、全局变量、堆、堆栈、静态和全局

局部变量、全局变量、堆、堆栈、静态和全局--------------------------------------------------------------- 一般全局变量存放在数据区&#xff0c;局部变量存放在栈区&#xff0c; 动态变量存放在堆区&#xff0c;函数代码放在代码区。 ----------------------------------…

博客园的编辑器毛病真多.....

1.有时候首行插入代码后&#xff0c;想删除代码做不到了——代码可以删除&#xff0c;可是那个框死活删不掉。 2.有时候删除大段内容的时候会突然卡住&#xff0c;然后整个页面回退到初始状态——编辑的内容没了&#xff0c;自动保存中也没有。 3.有时候进入编辑页面能看到编辑…

MSN消息提示类(II)

纯js编写跨框架无图片支持调速度任意位置弹出需要ie5.5以上 <HTML><HEAD><SCRIPT languageJavaScript><!--/**//* ** ** 类名&#xff1a;CLASS_MSN_MESSAGE ** 功能&#xff1a;提供类似MSN消息框 ** 示例&#xff1a; ----------…

查看docker-compose --version报错syntax error near unexpected token `(‘‘usr/local/bin/docker-compose:

问题 执行docker-compose --version查看版本是报错如下 /usr/local/bin/docker-compose: line 2: html: No such file or directory /usr/local/bin/docker-compose: line 3: head: No such file or directory /usr/local/bin/docker-compose: line 4: meta: No such file …

Android隐藏软键盘收回软键盘

代码改变世界 Android隐藏软键盘收回软键盘 InputMethodManager imm (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); // 隐藏软键盘 imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 代码中点击按钮实现隐藏软键盘…

oracle低权限下获取shell

转载请标明:http://hi.baidu.com/hack_forensic 《关于oracle列目录的可行性测试》 经过本人测试,确实可行,解决了 kj021320文章的遗憾,kj021320在文章<<ORACLE 建立数据文件WriteWebShell>>最后说,当然这个方法缺点就是你要知道WEB路径.少费话,直接贴code: crea…

spring的父子容器

在创建ssm项目工程时&#xff0c;经常需要读取properties资源配置文件&#xff0c;传统的方法当然可以。 但是spring提供了更简便的方法&#xff0c;value注解。 在page.properties文件中&#xff0c;配置分页信息。 这个时候&#xff0c;发现在Service层用value("${PAGES…

kubectl --help查看帮助命令

查看帮助命令 kubectl --help 具体查看某个操作 kubectl get --help

【网络基础】《TCP/IP详解》学习笔记3

一&#xff0e; 第四章&#xff1a;《ARP&#xff1a;地址解析协议》问题一&#xff1a;ARP的作用&#xff1f;ARP为IP地址到对应的硬件地址提供动态映射。问题二&#xff1a;ftp hostname的过程。1) DNS解析&#xff0c;将hostname解析成IP地址2) 请求TCP用得到的IP地址建立连…

使用localstorage来存储页面信息

今天小颖在跟着慕课网学习vue&#xff0c;不学不知道&#xff0c;一学吓一跳&#xff0c;学了才发现&#xff0c;我之前知道的只是vue的冰山一角&#xff0c;嘻嘻&#xff0c;今天把小颖跟着慕课网学习的demo&#xff0c;给大家分享下&#xff0c;希望对大家有所帮助嘻嘻。 环境…

kubectl get cs 查看组件状态

查看组件状态 Healthy为正常 kubectl get cs

[问题]魔兽双击地面回到选中的单位

问题描述&#xff1a;在玩魔兽时(dota或战略都一样)&#xff0c;鼠标双击地面或者在小地图上拖动鼠标松开的时候&#xff0c;画面总是回到已选中的那个单位。 问题原因&#xff1a;其他程序的快捷键和魔兽的快捷键冲突。在我的电脑上发现是“有道桌面词典”&#xff0c;具体是什…

UITextField实时监听输入文本的变化

开始用如下代理方法发现只能监听到变化后的前一位 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{//变化后的字符串NSLog("%",textField.text);return YES; } 然后在代理方法里面…

深圳SQL数据库823报错修复

深圳某电子公司SQL数据库恢复成功SQL2000数据库类型&#xff1a;SQL数据库版本&#xff1a;SQL2000MDF大小&#xff1a;1.3GB故障现象&#xff1a;SQL数据库正在编辑数据时&#xff0c;突然断电&#xff0c;开机后数据库报错再次附加数据库提示823报错&#xff01;客户要求&…

JAVA字符串格式化-String.format()的使用

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 format(String format, Object... args) 新字符串使用本地语言环境&#xff…