【 Gym 101116K 】Mixing Bowls(dfs)
BUPT2017 wintertraining(15) #4H
Gym - 101116K
题意
给定一个菜谱,大写的单词代表混合物,小写的代表基础原料。每个混合物由其它混合物或基础原料组成,不会间接或直接地需要自己。制备每个混合物必须先制备组成它的混合物。且混合物都要用一个碗装,当它作为原料去合成其它混合物后,碗就空出来了。求合成第一个混合物最少需要用几个碗。
题解
假设合成一个混合物需要dfs(i)个碗。
因为最后需要合成第一个混合物,所以我们以它为根进行dfs。
假设当前混合物的原料里有t个混合物,其中第j个合成的混合物需要need[j]个碗,且还要j-1个碗装前面j-1个混合物,因此此时需要j-1+need[j]个碗。
因此我们把need按从大到小排序,求出合成子混合物时所需的最大碗数,最后混合成当前混合物需要t+1个碗,取两者最大值即可。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define N 1005
using namespace std;
struct node{
char name[25];
char son[15][25];
int d;
}a[N];
int n;
int s[N];
bool cmp(int a,int b){
return a>b;
}
int dfs(int x){
int t=0,need[15];
memset(need,0,sizeof need);
for(int j=1;j<=a[x].d;j++)
if(a[x].son[j][0]>='A'&&a[x].son[j][0]<='Z'){
t++;
for(int i=1;i<=n;i++)if(strcmp(a[i].name,a[x].son[j])==0){
need[t]=s[i]?s[i]:dfs(i);
break;
}
}
sort(need+1,need+1+t,cmp);
int ans=t+1;
for(int j=1;j<=t;j++){
ans=max(j-1+need[j],ans);
}
return s[x]=ans;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s%d",a[i].name,&a[i].d);
for(int j=1;j<=a[i].d;j++)
scanf("%s",a[i].son[j]);
}
printf("%d\n",dfs(1));
return 0;
}
【 Gym 101116K 】Mixing Bowls(dfs)的更多相关文章
- 【POJ - 3984】迷宫问题(dfs)
-->迷宫问题 Descriptions: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ...
- 【POJ - 1321】棋盘问题 (dfs)
棋盘问题 Descriptions: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘 ...
- 【POJ - 1970】The Game(dfs)
-->The Game 直接中文 Descriptions: 判断五子棋棋局是否有胜者,有的话输出胜者的棋子类型,并且输出五个棋子中最左上的棋子坐标:没有胜者输出0.棋盘是这样的,如图 Samp ...
- 【 Gym - 101124E 】Dance Party (数学)
BUPT2017 wintertraining(15) #4G Gym - 101124 E.Dance Party 题意 有c种颜色,每个颜色最多分配给两个人,有M个男士,F个女士,求至少一对男士同 ...
- 【 Gym - 101138F 】GukiZ Height (数学)
BUPT2017 wintertraining(15) #4 C Gym - 101138F 题意 初始高度0,目标值h,第i天目标值会下降i,当前高度会改变a[i%n],求高度不小于目标值的最早的时 ...
- 【Gym - 100812G 】Short Path (SPFA)
BUPT2017 wintertraining(15) #7B 题意 n个点m条无向有权边(2 ≤ n ≤ 10^5, 1 ≤ m ≤ 10^5),每个点标记了0或1,求所有1中,最近的两个1的下标及 ...
- 【Gym - 101002F】Mountain Scenes(dp)
Mountain Scenes Descriptions 给你一个长度为n的丝带,一个宽w一个高h 的 格子,用丝带去填充格子,这填充后只需要满足至少有一列的丝带长度与其他格子不同即可.丝带可以不全部 ...
- 【Win10 UWP】QQ SDK(二):SDK的回调处理
上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...
- 【Win10 UWP】QQ SDK(一):SDK基本使用方法
每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建 ...
随机推荐
- springbootAdmin+eureka集群+swagger
请移步githubb下载源码.知识共享.(https://github.com/yivvonllh) 或者直接git下载(https://github.com/yivvonllh/spring-clo ...
- odoo11 访问web/database/manager管理数据库页面布局混乱问题
最近在使用odoo11开发自己的模块时,在管理数据库的页面的时候,页面布局混乱,查看http加载页面的时候大量的js css文件没有加载成功,被卡了3天,现在问题找到. 问题是在加入自己的custom ...
- webpack 构建 node_modules 中公司内部组件
构建 node_modules 中特定的组件 { test:/\.js$/, exclude: /node_modules\/(?!(zt-)\/).*/, use:[ { loader:" ...
- Docker(五):Docker 三剑客之 Docker Machine
上篇文章Docker(四):Docker 三剑客之 Docker Compose介绍了 Docker Compose,这篇文章我们来了解 Docker Machine . Docker Machine ...
- slurm.conf系统初始配置
#slurm集群配置 ##集群名称 ClusterName=myslurm ##主控制器的主机名 ControlMachine=node11 ##主控制器的IP地址 ControlAddr=192.1 ...
- 2018年高教社杯全国大学生数学建模竞赛B题解题思路
题目 先贴下B题的题目吧 问题B 智能RGV的动态调度策略 图1是一个智能加工系统的示意图,由8台计算机数控机床(Computer Number Controller,CNC).1辆轨道式自动引 ...
- JavaScript之命名空间模式
前言 命名空间可以被认为是唯一标识符下代码的逻辑分组.为什么会出现命名空间这一概念呢?因为可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象.在JavaScript中,命名空间可以帮 ...
- React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+
"C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...
- 附加题(一)——interesting的抄袭现象
这次的作业很有意思,是让我们搜索抄袭的同学的个人总结,并让我们列出链接,时间,作者及原因.其实我不是很能理解,抄袭现象是可耻的不受推崇的这是无可厚非,但是为什么要求我们大部分没有抄袭的同学去探究抄袭同 ...
- 个人作业——final
一 . 对M1M2的一个总结 我特别感谢我们组的PM.以前我觉得女生学计算机这个专业,跟男生比差太远了.总觉得我们女生就是上上课写写作业考考试还行,但是一到开发什么项目啊,实战之类的,总觉得自己的能力 ...