洛谷P2306 被yyh虐的mzc
题目背景
mzc与djn第三弹。
题目描述
mzc家很有钱(开玩笑),他家有n个男家丁(做过前两弹的都知道)。但这些都不足以挽救他被yyh虐的命运。于是他向你们发起了求救。
mzc要派出k个男家丁与yyh大战,但他只能承载质量为M的男家丁,现在他想知道她们(你没有看错)的战斗力之和是否打得过yyh。
输入输出格式
输入格式:
第一行有三个数n,m,k,n表示有n个男家丁,m表示能承载m的质量,k表示yyh的战斗力。
之后n行,每行两个数a[i],b[i],分别表示第i个男家丁的质量和战斗力。
输出格式:
两行,若打得过(大于等于):输出“yes”;
若打不过:输出“no”。
第二行输出最高战斗力.
输入输出样例
3 100 100 71 100 69 1 1 2
yes 102
说明
20%,n<=1000;
100%,n,m<=100000,a[i],b[i]<=10。
由于mzc大大十分着急,所以他只能等待1S。
乍一看,01背包,但是只有20分。。。
于是,将质量与战斗力相同的男家丁合并,于是成了 多重背包。。。
然而还是 TLE。。。
二进制优化!!!
附代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define MAXN 100010
#define MAXM 135
using namespace std;
int n,m,k,d=1,ans=0,v[MAXM],w[MAXM],c[MAXM],dp[MAXN];
struct node{int v,w;
}a[MAXN];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
bool cmp(const node &x,const node &y){if(x.w==y.w)return x.v>y.v;return x.w<y.w;
}
int main(){int s,t;n=read();m=read();k=read();for(int i=1;i<=n;i++){a[i].w=read();a[i].v=read();}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){w[d]=a[i].w;v[d]=a[i].v;c[d]=1;while(i<=n&&a[i+1].w==a[i].w&&a[i+1].v==a[i].v){c[d]++;i++;}d++;}s=1;t=d-1;while(w[s]==0){ans+=c[s]*v[s];s++;}for(int i=s;i<=t;i++){int num=c[i];for(int j=1;num-j>0;j*=2){num-=j;for(int l=m;l>=j*w[i];l--)dp[l]=max(dp[l],dp[l-j*w[i]]+j*v[i]);}for(int l=m;l>=num*w[i];l--)dp[l]=max(dp[l],dp[l-num*w[i]]+num*v[i]);}ans+=dp[m];if(ans>=k)printf("yes\n");else printf("no\n");printf("%d\n",ans);return 0;
}
洛谷P2306 被yyh虐的mzc相关推荐
- 洛谷 - 试炼场(全部题目备份)
整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...
- 洛谷试练场入门之“洛谷的第一个任务”讲解
话说,其实我主要在洛谷上做题 www.luogu.org 有些萌新若想在洛谷提升自己的实力,先看试炼场 因为吧,我个人觉得试炼场是适合一点一点来 那么这是试炼场的截图 分五个阶段: 1.入门 2.普及 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
- 洛谷 P1387 最大正方形
P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...
- 洛谷P2763 试题库问题
题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...
- 动态规划——洛谷_P1057传球游戏
题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...
- 洛谷P1417 烹调方案
洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...
- 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )
昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...
- 洛谷专题训练 ——【算法1-1】模拟与高精度
洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...
最新文章
- fastjson 的作者,在阿里内网挨骂了?!
- 差异表达基因火山图(ggplot函数)
- [置顶] Android面试题目之四: 归并排序
- C# 8的新提案:new关键字类型推断
- java进阶 2018_Java Web基础入门2018版
- Android选项切换条SHSegmentControl
- excel生成mysql语句_通过SQL语句直接实现Excel与数据库的导入导出
- 4.4.5 清除变量内容
- Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
- sublime编写python路径报错怎么改_MacOS-Sublime-Text3设置Python3编译环境
- 神武咪咕汇点燃大湾区 多益网络深化新文创实践
- 各大媒体优劣对比_主流酱油选购对比
- 数字化方法基础(四)_矩阵操作
- Android自定义控件及自定义属性
- 修改本地数据库root权限密码
- 如何走出创新者的窘境?走向2049
- v21 v8中资源找不到
- 交换机上网显示本地未连接服务器,本地连接提示受限制或无连接,处理思路?...
- unity webgl 手机端微信直接打开链接
- 高二计算机课程难点,巧用信息技术手段 突破高中数学课堂教学的重难点