正题

题目链接:https://www.luogu.org/problemnew/show/P3112


题目大意

有nnn只牛,每只牛有hi,wi,sih_i,w_i,s_ihi​,wi​,si​分别表示有多高,有多重,上面最多承载总共多重的牛。
选择一些牛依次摆放要求高度超过TTT且上面还能增加最重的物品。


解题思路

首先我们考虑已经选定了牛了,然后如何摆放是最优的:
resti=si−∑j=i+1nwjrest_i=s_i-\sum_{j=i+1}^nw_jresti​=si​−j=i+1∑n​wj​
我们考虑是否交换两项
resti=si−(∑j=i+1nwj)rest_i=s_i-(\sum_{j=i+1}^nw_j)resti​=si​−(j=i+1∑n​wj​)
resti+1=si+1−(∑j=i+1nwj)−wirest_{i+1}=s_{i+1}-(\sum_{j=i+1}^nw_j)-w_iresti+1​=si+1​−(j=i+1∑n​wj​)−wi​
考虑是否交换要求
max{min{resti,resti+1},min{Nresti,Nresti+1}}max\{min\{rest_i,rest_{i+1}\},min\{Nrest_i,Nrest_{i+1}\}\}max{min{resti​,resti+1​},min{Nresti​,Nresti+1​}}
两边同时加上(∑j=i+1nwj)(\sum_{j=i+1}^nw_j)(∑j=i+1n​wj​)
那么就是求
max{min{si,si+1−wi},min{si+1,si−wi+1}}max\{min\{s_i,s_{i+1}-w_i\},min\{s_{i+1},s_{i}-w_{i+1}\}\}max{min{si​,si+1​−wi​},min{si+1​,si​−wi+1​}}
然后si>si−+wi−1s_i>s_{i}-+w_{i-1}si​>si​−+wi−1​且si+1>si+1−wis_{i+1}>s_{i+1}-w_isi+1​>si+1​−wi​(显而易见)
如果si+1−wi≤si−wi−1s_{i+1}-w_i\leq s_i-w_{i-1}si+1​−wi​≤si​−wi−1​
那么有si+1−wi≤sis_{i+1}-w_i\leq s_isi+1​−wi​≤si​那么交换肯定更优
那么只要si+wis_i+w_isi​+wi​从大到小选择就好了。


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const ll N=21;
ll n,T,sh,maxs,ans,w,MS;
struct node{ll h,w,s;
}a[N];
bool cmp(node x,node y)
{return x.s+x.w>y.s+y.w;}
int main()
{scanf("%lld%lld",&n,&T);for(ll i=1;i<=n;i++)scanf("%lld%lld%lld",&a[i].h,&a[i].w,&a[i].s);sort(a+1,a+1+n,cmp);MS=1<<n;ans=-1;for(ll i=0;i<MS;i++){sh=w=0;maxs=2147483647;for(ll j=n;j>=1;j--)if((i>>j-1)&1){sh+=a[j].h;maxs=min(maxs,a[j].s-w);w+=a[j].w;}if(sh<T) continue;ans=max( maxs,ans);}if(ans<0)printf("Mark is too tall");else printf("%lld",ans);
}

P3112-[USACO14DEC]后卫马克Guard Mark【贪心】相关推荐

  1. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark

    题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...

  2. bzoj3824[Usaco2014 Dec]Guard Mark 奶牛叠罗汉(II)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3824 题目大意: 题解: 状压dp f[i]表示已经选了i的奶牛来叠的最大安全因子为多少. ...

  3. bzoj 3824: [Usaco2014 Dec]Guard Mark【状压dp】

    设f[s]为已经从上到下叠了状态为s的牛的最大稳定度,转移的话枚举没有在集合里并且强壮度>=当前集合牛重量和的用min(f[s],当前放进去的牛还能承受多种)来更新,高度的话直接看是否有合法集合 ...

  4. 网络安全职业_我如何开始网络安全职业

    网络安全职业 Throughout my career as a cybersecurity professor, I often get questions about starting a car ...

  5. 多个敏捷团队同时做一个项目_您说您的团队很敏捷……但是这个词可能并不代表您的想法。...

    多个敏捷团队同时做一个项目 by Mark Shead 由马克·希德(Mark Shead) Many things get called Agile - especially by people w ...

  6. IT行业观察:阿里巴巴有望成为下一只中国IPO

    拥有1.1亿互联网用户的中国依然存在著唾手可得的巨大商机. 这是谷歌(Google)首席执行长埃里克施密特(Eric Schmidt)的乐观看法.他最近向投资者表示,公司已开始在这个全球最庞大的消费市 ...

  7. 全球第二家 亚马逊“喜提”万亿美金市值 AI或是最大功臣

    亚马逊创始人杰夫·贝佐斯(Jeff Bezos) 来源:网易智能 摘要:9月5日消息,美国当地时间周二,全球电商巨头亚马逊(Amazon)股价一度触及史上最高点,促使亚马逊市值短暂达到1万亿美元. 不 ...

  8. 全球所有货币币种汇总

    亚 洲 货币名称 货币符号 辅币进位制 中 文 英 文 原 有 旧 符 号 标 准 符 号 中国香港 港元 HongKong Dollars HK$ HKD 1HKD=100cents(分) 中国澳门 ...

  9. Alphabet股价周五跌5.32%:三年最大单日跌幅

    4月23日消息,据路透社报道,谷歌母公司Alphabet首席财务官露丝·波拉特(Ruth Porat)再明确不过了:她周四表示,Alphabet需要加大投资以提高流量. 分析师对此表示同意,但投资者不 ...

最新文章

  1. 差错控制:海明码、循环冗余校验码
  2. python 矩阵中的冒号 逗号
  3. ASP.Net4中实现自定义的请求验证(转贴)
  4. 这份工程师简历火了:手磨14nm咖啡,在微软传播性病,90%公司伸橄榄枝
  5. SQL基础【十五、join、Inner join、Left join、Right join、Full join】
  6. JAVA传入一个字符串,返回一个字符串中的大写字母
  7. 最近想读的书想做的事
  8. CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发
  9. .Net 中的封装知识点
  10. gtj2018如何生成工程量报表_如何更高效地使用EXCEL,一键生成报表?
  11. python最长匹配_二分图最大匹配:匈牙利算法的python实现
  12. python螺旋圆的绘制_亦明图记:SolidWorks绘制扭转弹簧,使用组合曲线作为扫描路径...
  13. 如何使用JavaScript获取客户端的IP地址?
  14. 一次weblogic 在aix hacmp上调试过程
  15. 16. jQuery - 获取并设置 CSS 类
  16. 全国行政区划分简单分析
  17. vue项目性能优化详解汇总
  18. Python实现八大排序算法
  19. 【软件工程】决策表和决策树
  20. 查看docker里应用的版本

热门文章

  1. 索尼服务器维护时间,索尼云服务器
  2. linux命令查询邮件发送状态,Linux发邮件之mail命令详解
  3. python逐行读取数据时出现错误_python如何逐行读取数据
  4. python等值面图平滑_离散点插值方法、等值线的绘制及平滑技巧
  5. [JavaWeb-JavaScript]JavaScript_RegExp正则表达式对象
  6. 高等数学下-赵立军-北京大学出版社-题解-练习8.1
  7. [蓝桥杯]回形取数-方向向量+模拟
  8. Wooden Sticks POJ - 1065(最大上升子序列+动态规划状态转移思维)
  9. 将字符串添加负数_Go语言实现LeetCode算法:8 字符串转整数
  10. word List35