codevs 2075 yh女朋友的危机 解题报告
来源:互联网 发布:软件技术指标怎么写 编辑:程序博客网 时间:2024/05/21 22:23
前言
说实话,我是看到这个题目才进来的,这个设定?女朋友们?还掉到坑里面?好鬼畜。。。而且,题目标明,这是一道贪心题目,然后我贪了一会儿,才发现是DP!!
正题
题目描述
不知为什么,yh的女朋友们都掉入了一个深度为h的天坑。由于天坑太深,yh的女朋友们无法爬出去,于是她们决定用搭人梯的方式脱困。我们知道yh的每位女朋友从脚到肩膀的高度ai,以及肩膀到伸直手臂的距离bi。由k个人搭成的人梯的高度为a1+a2+…+ak+bk;当人梯高度大于等于h时,第k个人就可以爬出天坑,并再也不进来。你能帮助他的女朋友们安排一个方案,使得最多的女朋友能爬出天坑吗?
思路
题目要求,一个女孩有两个数据,所以结构体储存两个信息,一个是每位女朋友从脚到肩膀的高度ai,以及肩膀到伸直手臂的距离bi。
但是题目规定最后一个人是b加上前面的a。
接下来就是贪心了,按照(a+b)排序。
然后DP,转移方程如下:
dp[j+1]=max(dp[j]-people[i].a,dp[j+1])
然后就好了。
代码
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>const int M=100000+5;using namespace std;int n,height,ans,dp[M];struct girl{ int a,b;//从脚到肩膀的高度a,肩膀到伸直手臂的距离b bool operator <(girl other)const { return a+b<other.a+other.b; }}people[M];int max(int x,int y){ if (x>=y) return x; else return y;}int main(){ memset(dp,-1,sizeof(dp)); dp[0]=0; scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d%d",&people[i].a,&people[i].b); dp[0]+=people[i].a; } scanf("%d",&height); sort(people+1,people+n+1); for (int i=1;i<=n;i++) for (int j=ans;j>=0;j--) { dp[j+1]=max(dp[j]-people[i].a,dp[j+1]); if (dp[ans+1]>=0) ans++; } printf("%d",ans); return 0;}
彩蛋
阅读全文
2 0
- codevs 2075 yh女朋友的危机 解题报告
- CodeVS 2075 yh女朋友的危机 贪心 + DP
- 找女朋友解题报告
- Codevs 1503 愚蠢的宠物 解题报告
- Codevs 1026 逃跑的拉尔夫 解题报告
- [CODEVS]数据结构系列 解题报告
- CODEVS 1022 覆盖 解题报告
- [codevs 1515]跳 【解题报告】
- Codevs 1251 括号 解题报告
- Codevs 1557 热浪 解题报告
- CodeVS 2370 LCA 解题报告
- codevs 1006 等差数列 解题报告
- codevs 1198 NOIP 2012 国王的游戏 高精度 解题报告
- codevs 1380 没有上司的舞会 DP 解题报告
- codevs 1001 舒适的路线 玄学方法 解题报告
- codevs 1399 酗酒的狱警 模拟?解题报告
- codevs 1144 守望者的逃离 贪心? 解题报告
- codevs 2038 香甜的黄油 SPFA 解题报告
- 记录使用imagespickers第三方库的一些细致
- 海量数据下的分布式存储与计算
- ORB-SLAM2详解(四)跟踪
- Leetcode 78 Subsets
- fetch API 简介
- codevs 2075 yh女朋友的危机 解题报告
- 第一次使用HBuilder
- Linux系统下搭建SVN服务以及客户端
- Iptables-(1)概念
- ORB-SLAM2详解(五)局部建图
- kafka 基础知识
- Mvvm Light Toolkit 入门
- gradle进行工程环境配置(通过修改Asset目录下的文件)
- 我的第一个hbuilder项目,基于h5的五子棋游戏