【问题描述】

圣诞特别礼物挂在一棵圣诞树上,这棵树有n层,每层有一件礼物,每件礼物都有一个价值,有的礼物还有一些连结线,与下层的礼物相连,领取礼物的规则如下:任选一件礼物,它的下面如果有连结线,则可以继续取它连结的礼物,以此类推,直至取到没有连结线的礼物才结束,你如果是第一个去取,怎样取才能获得最大的价值呢?请你编一程序解决这一问题。

【输入文件】

输入文件tree.in的第一行只有一个数据n(n<=100),表示有n层礼物,以下有n行数据,分别表示第1-n层礼物的状态,每行至少由一个数据构成,且第一个数据表示该礼物的价值,后面的数据表示它与哪些层的礼物相连,如果每行只有一个数据则说明这层礼物没有与下层礼物相连,每个数的大小均不超过10000。

【输出文件】

输出文件tree.out也只有一个数,表示获得的取大价值。

【输入样例】

3

12 2 3

20

30

【输出样例】

42

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u228

【题解】



设f[x]表示选第x层的礼物能够获得的最大价值;

f[x] = a[x];

f[x] = max(f[x],f[x]+max(f[x的儿子节点]);

最后1..n取最大的f值;

一棵树可能有多个根;

之前算过的f值就不要重复算了.

一行里面有未知个数的数字的;

可以用cin.peek()函数来判断是不是读到了行末



【完整代码】

#include <cstdio>
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXN = 110; int n;
int a[MAXN],f[MAXN];
vector <int> g[MAXN];
bool bo[MAXN]; void dfs(int x)
{
f[x] = a[x];
bo[x] = true;
int len = g[x].size(),temp = -21e8;
rep1(i,0,len-1)
{
int y = g[x][i];
if (!bo[y])
dfs(y);
temp = max(temp,f[y]);
}
if (temp>0)
f[x]+=temp;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n;
char t = getchar();//把换行符给读了
rep1(i,1,n)
{
int x;
rei(a[i]);
while (cin.peek()!=EOF)
{
if (isdigit(cin.peek()))
{
cin >> x;
g[i].pb(x);
}
if (cin.peek()=='\n')
break;
cin.ignore();
}
t = getchar();
}
rep1(i,1,n)
if (!bo[i])
{
dfs(i);
}
int ans = f[1];
rep1(i,2,n)
ans = max(ans,f[i]);
printf("%d\n",ans);
return 0;
}

【u228】圣诞树的更多相关文章

  1. 利用js2image把代码压缩成圣诞树

    马上圣诞节了,作为一名程序猿,如何体现自己独特的过节风格,如何在朋友圈发一张专属自己的祝福照片我觉得很有必要,你们说是不是. 谈到圣诞节,话说程序猿和圣诞之间的关系还有这么一个笑话: Q:程序员为什么 ...

  2. C语言 打印圣诞树

    再回首<C语言编程基础>,其中不少当年老师出的题,做完后稍微做了下修改,可以输入任意行数来打印圣诞树,行数越大,树越大,当然显示器也要越大,不然就折行了. 纯粹练手跟加强记忆的东西,做个记 ...

  3. 用css属性画出一棵圣诞树

    对于学习前端的童鞋,css的掌握是必须的.今天就来实现用css画出一棵圣诞树. 主要练习的是css里面border的练习与掌握程度. 在body创建一个主区域<div></div&g ...

  4. 用div画一个圣诞树

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. HTML5 Canvas圣诞树

    又逢圣诞了,为了让小站NowaMagic有点节日气氛,这里也弄一棵圣诞树放放-大家可以先看下效果. 效果演示 <canvas id="c"></canvas> ...

  6. html5 3D圣诞树源码

    1. [代码][HTML]代码   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http ...

  7. Turtle-可视化界面画圣诞树

    圣诞节(Christmas)又称耶诞节.耶稣诞辰,译名为“基督弥撒”,是西方传统节日,起源于基督教,在每年公历12月25日.弥撒是教会的一种礼拜仪式.圣诞节是一个宗教节,因为把它当作耶稣的诞辰来庆祝, ...

  8. Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)

    不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~)one 樱花树 动态生成樱花效果图(这个是动态的) ...

  9. 使用python画一颗圣诞树

    # -*- coding: utf-8 -*- # @Time : 18-12-26 上午9:32 # @Author : Felix Wang import turtle # 定义圣诞树的绿叶函数 ...

随机推荐

  1. Python PEP8标准

    1.编码 如无特殊情况,文件一律使用utf-8编码 如无特殊情况,文件头部必须添加# -*- coding:utf-8 -*- 标志 2.代码 统一使用四个空格缩进 每行代码不超过80个字符 自然语言 ...

  2. 搭建直播服务器,使用nginx与nginx-rtmp-module搭建流媒体服务器;

    现在,一起学习一下如何自己搭建一个流媒体服务器吧! 本次搭建流媒体使用的环境是centos 7.0+nginx: 让我们一起开始奇妙的流媒体之旅吧! 1.下载nginx-rtmp-module: ng ...

  3. htmlhomework2

    <!DOCTYPE html> register register username: password: birth: gender: male female

  4. iOS:你App的设置做对了吗?

    http://www.cocoachina.com/ios/20151217/14707.html iOS 8及以上版本最不为人知的一个特点是与应用设置的深层链接,用户可以根据APP的需要授权启用位置 ...

  5. No PostCSS Config found解决办法

    npm install报错 Module build failed: Error: No PostCSS Config found 解决办法是同级package.json文件新建postcss.con ...

  6. react-cnode

    感谢无私开源的程序员们~~~代码因为你们更加美腻~ //根index.js import React, { Fragment } from 'react'; import ReactDOM from ...

  7. php中括号定义数组

    php5.3及之前的版本是不支持中括号定义数组的.5.4之后支持. 错误信息是,不识别“[”

  8. Codeforces 276D

    题目链接 这题真的体现了自己思维的不足,考虑问题只是考虑他的特殊性,却不能总结出它的一般性规律. 对于这题, 如果L == R , 那么结果为0. 否则, 我们只需要找到最高的某一位 (二进制数中的某 ...

  9. python 并发之线程

    一.什么是线程 #指的是一条流水线的工作过程,关键的一句话:一个进程内最少自带一个线程,其实进程根本不能执行,进程不是执行单位,是资源的单位,分配资源的单位 #线程才是执行单位 #进程:做手机屏幕的工 ...

  10. MaxCompute 图计算用户手册(上)

    概要 ODPS GRAPH是一套面向迭代的图计算处理框架.图计算作业使用图进行建模,图由点(Vertex)和边(Edge)组成,点和边包含权值(Value),ODPS GRAPH支持下述图编辑操作: ...