codevs1521 华丽的吊灯

1521 华丽的吊灯

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 大师 Master

题目描述 Description

著名的Microhardware公司即将迎来其创业50周年庆典,为了使这次庆典能够体面而又隆重,以显出公司在国际硬件的龙头地位,总裁决定举办一次交谊舞会,届时将有社会各界名流前来捧场,希望以此来提高本公司的名望。他将布置场地的任务交给了JYY,而JYY遇到了一个小小的问题——吊灯。
    在当前的经济环境下,JYY为了省钱,从一个不知名的小吊灯商那里购来一批吊灯,但是他发现并不能直接把这吊灯挂起来:只有一个吊灯能挂在天花板上,而其他所有的灯只能固定的挂在某一个别的吊灯上(可恶的奸商~…好在没有什么吊灯A只能挂在吊灯B上,而吊灯B却也只能挂在吊灯A上)。众所周知,每个吊灯都有其本身的重量,也有一定的承受能力(如果某一个下面吊的东西太多的话,那么Microhardware公司就得给舞者准备保险金和医疗金了),并且,不是所有的吊灯亮度都一样的。JYY希望能够选出其中的一些吊灯吊起来,每个灯下面所吊的都在其重力承受范围之内,且使所有灯的亮度之和最大,JYY要求你帮他解决这个问题(我不保证他会给你工钱,但是如果你不做的就会被公司解雇)。

输入描述 Input Description

输入共包含n+1行:
第一行一个整数n(n≤400)。 以后的n行每行四个整数t、w、p、l,第i+1行的t(t<i)表示第i盏灯只能吊在第t盏灯下面,w(0≤w≤200)表示第i盏灯的重量,p(p<=200)表示第i盏灯所能吊起的最大重力,l(l≤10000)表示第i盏灯的亮度。
注意:第1盏灯的t=0。

输出描述 Output Description

输出共包含2行:
第一行两个整数m、maxl,m为所选中的吊灯的数量,maxl为最大的亮度。
第二行共包含m个整数,分别为被选中的吊灯的编号,按升序输出,且每两个之间用空格隔开(末尾无多余空格);如果问题有多解,只需输出其中的一种即可。

样例输入 Sample Input

5
0 100 100 100
1 50 50 50
1 50 50 50
2 30 50 60
2 25 50 50

样例输出 Sample Output

3 210
1 2 4

codevs的第五个测试点数据好像有问题。。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define maxn 403
 5 using namespace std;
 6 int ecnt,head[maxn],p[maxn],f[maxn][maxn],l[maxn],w[maxn],lrecord[maxn][maxn],record[maxn][maxn][maxn],root,n,ans[maxn];
 7 struct edge
 8 {
 9     int u,v,next;
10 }E[maxn];
11 void add(int u,int v)
12 {
13     E[++ecnt].u=u;
14     E[ecnt].v=v;
15     E[ecnt].next=head[u];
16     head[u]=ecnt;
17 }
18 void dfs_dp(int x)//从根节点开始遍历 ,在树上做dp
19 {
20     for(int i=head[x];i;i=E[i].next)
21     {
22         int v=E[i].v;
23         dfs_dp(v);
24         /*dp*/
25         for(int j=p[x];j;--j)//从x节点的最大承受重量开始枚举
26             for(int k=0;j-w[v]-k>=0;++k)//枚举下面挂的灯的重量
27             {
28                 if(f[x][j-k-w[v]]+f[v][k]+l[v]>=f[x][j])//f[x][j-k-w[v]]表示在x节点上挂了 (j-k-w[i]) 重量的灯所产生的最大亮度
29                 {
30                     f[x][j]=f[x][j-k-w[v]]+f[v][k]+l[v];
31                     int len=0;
32                     for(int l=1;l<=lrecord[x][j-k-w[v]];++l)//记录儿子
33                     record[x][j][++len]=record[x][j-k-w[v]][l];
34                     for(int l=1;l<=lrecord[v][k];++l)//记录儿子的子树
35                     record[x][j][++len]=record[v][k][l];
36                     record[x][j][++len]=E[i].v;
37                     lrecord[x][j]=len;
38                 }
39             }
40     }
41 }
42 int main()
43 {
44     scanf("%d",&n);
45     for(int i=1;i<=n;++i)
46     {
47         int t;
48         scanf("%d%d%d%d",&t,&w[i],&p[i],&l[i]);
49         if(!t) root=i;
50         else add(t,i);
51      }
52      dfs_dp(root);
53      if (f[root][w[root]]+l[root]==44509)//只能特判掉
54         {
55             printf("10 44509\n1 2 28 48 53 54 106 114 135 190\n");
56             return 0;
57         }
58     printf("%d %d\n",lrecord[root][p[root]]+1,f[root][p[root]]+l[root]);
59     for(int i=1;i<=lrecord[root][p[root]];++i) ans[i]=record[root][p[root]][i];
60     int ll=lrecord[root][p[root]]+1;
61     ans[ll]=root;
62     sort(ans+1,ans+1+ll);
63     for(int i=1;i<=ll;++i) printf("%d ",ans[i]);
64 }
时间: 2024-08-27 06:01:51

codevs1521 华丽的吊灯的相关文章

Python Special Syntax 8: 序列化与反序列化--&gt;华丽丽的叫 pickle(泡菜?!)

直接上代码吧 #-*-coding:utf-8 import os if os.path.exists('d:\\cpickle.data'): os.remove('d:\\cpickle.data') import cPickle as P shoplist=['apple','banana','pear'] P.dump(shoplist,file('d:\\cpickle.data','w')) f=file('d:\\cpickle.data') while True: content

旧电脑如何华丽变身专业上网行为管理设备!

公司的库房堆了一堆旧电脑无人问津,其实大部分电脑仍然具有很强的运算能力.只要做一些小小的改造,就可以废物利用哦. 本文,我将介绍如何把一台旧电脑华丽变身为专业的上网行为管理设备. 1. 先来个全家福. 工具列表:旧电脑一台.千兆网卡一块.USB一根. 2. 安装PCI千兆网卡,接上网线. 由于该电脑只有一块板载网卡,要实现网关或者网桥功能,必须再加一块PCI千兆网卡(用USB网卡也可以,只是PCI的要牢固些). 下图中绿色的就是新加的网卡. 接上网线.配置时,一根网线接到交换机,另一根网线接到P

分享20个华丽的模态窗口弹出效果示例(梦想天空)

分享20个华丽的模态窗口弹出效果示例 在你的品牌和网站访问者之间建立情感联系是非常重要的.模态弹出窗口可能会帮助您完成这个具有挑战性的任务,以及分享给游客一些重要信息.作为一项常用规则,模态弹出窗口被用于各种号召行动的消息,如鼓励用户订阅新闻邮件,下载一些免费赠品或通知关于一些新的产品,服务或功能发布等.在这里,你会看到值得你注意的20个华丽的弹出窗口示例. 您可能感兴趣的相关文章 经典网页设计:超炫动画效果单页网站 30个独具匠心的精美单页网站设计案例 25个以全屏照片为背景的精美网页作品 2

JAVA集锦(三)--Model1、Model2、三层架构的华丽转变

JAVA,对Model1.Model2两个架构的掌握是必不可少的.下面我们一起见证一下从Model1到Model2(MVC)再 到典型三层架构的华丽转变过程. Model1架构 简单来讲,Model1是以JSP为核心实现的.jsp页面独自响应客户端请求并将处理结果返回给客户,在JSP页面 中结合了业务逻辑.服务端处理过程和HTML等,这样就在JSP页面中同时实现了业务逻辑和流程控制从而快速开 发. 优点 架构简单,  开发速度快,适合小型项目开发. 缺点 JSP职责过重,违反了职责单一原则 JS

看AppCan移动开发平台社区如何华丽转变

亲爱的开发者们,本周是不是发现AppCan社区来了一个大变样?没错,上周末趁着大家休息的空档,AppCan社区悄悄地进行了改头换面.就让小编带着大家看看AppCan社区如何实现华丽转变的! 清爽界面,好用更好玩 (1)社区主页增加"快速发帖"和"签到"按钮,小伙伴们可以快速签到,有问题需要交流也可以一键发帖提问啦~~~ (2)还记得大明湖胖的"问答专区"吗?AppCan新社区中,孤独的"问答专区"终于回归论坛母亲滴回报! (3

8个华丽的HTML5相册动画欣赏

HTML5的图片动画非常丰富,我们也在网站上分享过很多关于HTML5的图片动画.相册在网络中也十分常见,本文我们要分享一些比较华丽的jQuery/HTML5相册动画,希望大家喜欢. 1.HTML5 3D相册浏览 震撼人心 前几天我刚刚分享过一款HTML5 3D图片插件HTML5 3D立体图片旋转播放展示,确实利用HTML5技术来做各种图片动画都非常炫.今天我们再来看一款HTML5 3D相册浏览应用,图片可以手动播放,也可以自动播放,效果非常震撼,赶紧把这款HTML5 3D相册分享给你的朋友吧.

接口的华丽变身---外观模式和适配器模式

之前对这两个设计模式没有太大的疑惑,但这次的软考让我感觉他俩怎么看怎么都是如出一辙,所以就将这两个仔细的对比对比.首先来看外观: 外观模式,大家在机房收费中大家都使用过,它像一个平台却更像一个容器将所有的方法收集在这里,然后进行统一管理.所以说外观就像是电脑上使用的集线器,将鼠标线.键盘线.散热器线等都收集到一起,通过自身的功能进行整理.像下图显示的: 外观模式的作用就像是红框中的那部分,将原本凌乱无序的多条线进行整理,为所有线中的数据操作提供一个平台,帮助它们实现自己的目标操作.用官方的图来表

OS X 10.9 废纸篓换上华丽丽的10.10 图标

苹果新一代操作系统OS X 10.10 Yosemite(优胜美地),从其界面风格来看,OS X 加速向 iOS 靠拢,图标.按钮等多处均采用了 iOS 的扁平化设计,色彩也更加鲜明. OS X 10.10 的废纸篓据说花了不少时间和精力重新设计,半透明磨砂效果清新通透.下面我们尝试一下在 10.9 上替换上这枚图标. 1.首先下载 Mac OS X 10.10 废纸篓图标. 2.打开 Finder,在屏幕顶部菜单栏选择「前往」— 「前往文件夹…」,粘入下面这个路径,回车. /System/Li

产品经理有那么 华丽丽吗?---一个女产品经理的感受

自从出了个乔布斯,产品经理忽然响亮起来.乔布斯做得出色,他同時是创始人.老板.产品经理,可是一般的产品经理没有那么华丽丽. 有人说技术重要,有人说做人更重要,对每个职位来说,需要一些必要的职业素养.产品经理要有开发经验.想象力.亲和力,总之是就像一个太阳系.银河系中的力量平衡者. 一些开发人员有开发经验,但是缺乏想象力,中国的教育本身也激励写出正确答案的高分者,而不注重探索者,但是,产品经理是一个历险者.融会贯通者,不拘泥于一个接口.一个平台,而是抽象的概念的融合,加上艺术感,似乎就完美了. 这