【问题描述】
在山的那边、海的那边有 n 个小矮人,他们生存的意义就是要保护他们的精
神领袖——GCD。有一天,他们收到了一封恐吓信,说要在一个遥远的地方用维
纳斯之箭射击 GCD,让他变成一根面条,n 个小矮人当然要保护 GCD,GCD 实在
是太高了,于是矮人们决定搭成一个不低于 GCD 的矮人塔,可他们智商很低,
于是就找到了你。
每个小矮人都有三个指数:h,w,s,分别代表身高,体重与承受力,每一个小
矮人上方所搭的矮人的体重之和不能超过他的承受力。
小矮人想问你他们能不能搭成一个符合要求的塔,如果能的话,他们还想问
你搭成的塔的最大的稳定性(塔的稳定性指的是还能在塔上方最多加的重量)。
【输入格式】
从 b.in 读入数据
两个正整数 n,H,H 表示 GCD 的身高。
接下来 n 行,每行三个正整数 h, w, s,意义如题中所述。
【输出格式】
输出到文件 b.out 中
如果不能,则输出 GCD is too tall
否则,输出一个正整数,表示塔的最大稳定性。
【样例输入 1】
4 10
941
335
5 5 10
445
【样例输出 1】
2
【样例解释】
从底向上分别放 3 号,4 号,二号
【样例输入 2】
4 100
941
335
5 5 10
445
【样例输出 2】
GCD is too tall
【数据规模和约定】对于 20%的数据,n<=10
对于 40%的数据,n<=20
对于 60%的数据,n<=25
对于 70%的数据,n<=30
对于 100%的数据,n<=50,H<=2147483647;h,w,s <= 10^9
其中有数据满足:
H <= 30000
H <= 40000
H <= 80000
H <= 130000
H <= 260000
保证数据随机生成~

我们考虑要选的小矮人 i,j,比较谁放在下面更优,当然是通过放了之后的
稳定值来比较,贪心地想,稳定值越大当然越好。
i 放在下面的稳定值为: s[i] - w[j];
所以,i 比 j 优的条件为: s[i] - w[j] > s[j] - w[i];
即: s[i] + w[i] > s[j] + w[j];
所以,我们开始把小矮人按 s + w 排序,对于选出来的小矮人,就不用枚举顺
序了

不过当然要加
上最优性剪枝(可行性剪枝好像没什么效果)。复杂度:O(???)

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long lol;
struct Zt
{
lol h,w,s;
}a[];
lol n,h,ans=-,sumh[],sumw[];
bool cmp(Zt a,Zt b)
{
return (min(a.s-b.w,b.s)>min(b.s-a.w,a.s));
}
void dfs(int x,lol H,lol P)
{
if (H>=h)
{
if (P>ans) ans=P;
return;
}
if (x>n) return;
if (ans>=P) return;
if (H+sumh[n]-sumh[x-]<h) return;
if (a[x].w<=P)
dfs(x+,H+a[x].h,min(a[x].s,P-a[x].w));
if (P)
dfs(x+,H,P);
}
int main()
{int i;
cin>>n>>h;
for (i=;i<=n;i++)
{
scanf("%lld%lld%lld",&a[i].h,&a[i].w,&a[i].s);
}
sort(a+,a+n+,cmp);
for (i=;i<=n;i++)
{
sumh[i]=sumh[i-]+a[i].h;
sumw[i]=sumw[i-]+a[i].w;
}
dfs(,,2e9);
if (ans==-) cout<<"GCD is too tall";
else
cout<<ans;
}

GCD(ZYYS)的更多相关文章

  1. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  2. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  3. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  4. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  5. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  6. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  7. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  8. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  9. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

随机推荐

  1. 铜齿铁牙UP计划

    铜齿铁牙UP计划 我在""做教练"之好声音训练"给出了老师.播音主持学习者,声乐学习者科学用声三要点: 用气发声 共鸣发声 虚实结合 用气发声首先要学会腹式呼吸 ...

  2. Python web服务器

    Python 配置wsgi接口# 引入Python wsgi包 from wsgiref.simple_server import make_server # 撰写服务器端程序代码 def Appli ...

  3. JUnit单元测试遇到的问题及解决思路

    JUnit是Java单元测试框架,我们在对开发的系统进行单元测试的时候,也遇到了如何测试多个测试用例的问题.  背景:我们的所有测试用例都保存在Excel文件中,该文件包含测试用例和预期输出.我们希望 ...

  4. sqlserver学习_01

    sqlserver的学习成长之路,每一个技术的学习过程都是值得让人回味的,现在百度上关于sqlser的资料很多,但是都太杂,希望能为大家分享一点简单易懂的干货,跟大家一起进步学习. 一.建表 1.创建 ...

  5. 业余草基于JAVA的模块化开发框架JarsLink

    需求背景 应用拆分的多或少都有问题.多则维护成本高,每次发布一堆应用.少则拆分成本高,无用功能很难下线.故障不隔离.当一个系统由多人同时参与开发时,修改A功能,可能会影响B功能,引发故障.多分支开发引 ...

  6. typedef 使用

    1,C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字. #include<stdio.h> typedef unsigned char BYTE; int mai ...

  7. 以太坊挖矿源码:clique算法

    上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...

  8. 非PE病毒介绍

    1.宏病毒 1.1 介绍 本文中的宏特制office系列办公软件中的宏,Microsoft Office中对宏的定义为"宏就是能够组织在一起的,可以作为一个独立命令来执行的一系列Word 命 ...

  9. kubernetes进阶(02)kubernetes的node

    一.Node概念 Node是Pod真正运行的主机,可以物理机,也可以是虚拟机. 为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt). kube ...

  10. python入门(5)使用文件编辑器编写代码并保存执行

    python入门(5)使用文件编辑器编写代码并保存执行 两款文本编辑器: 一个是Sublime Text,免费使用,但是不付费会弹出提示框: 一个是Notepad++,免费使用,有中文界面: 请注意, ...