「LuoguT36048」 Storm in Lover
Description
平成二十四年(2012年),5月11日,东京,某弓道场。
“呐,呐,海未酱,你听说了吗?几天后的那场弓道大会?啊—!”橙发少女兴奋地拿着一张传单一样的纸跑向蓝发少女。由于过于兴奋,橙发在跑过大门的时候一不小心,被门槛绊了一跤。
然而,蓝发少女站立着,手上拿着弓箭,似乎她的世界里并没有橙发少女。
她将弓抬起。拉弓;弓满;箭出。
可惜,离红心偏了一点。
蓝发少女本来的激动瞬间平静了下来,眼神仿佛有些游离。恍惚之间,这时才注意到摔倒的橙发和她手中的传单。
“啊……穗乃果,抱歉。我现在没什么心情,让我一个人静一会吧。”
“海未酱……”
“……事情就是这样。绘里酱有没有什么能让海未酱振作起来的方法呢?”穗乃果出来以后,碰到了她们的学生会长,绚濑绘里,于是把海未没有干劲事情告诉了她。
“这的确是个问题呢。……说起来,我听说前几天海未常用的那把弓坏了,现在用的如果是新弓的话,或许她需要一段时间熟练一下呢。”绘里回忆了一下,提议让海未多多练习一下新的弓。
题目描述
海未面前现在有n个靶子。按照绘里的指示,海未需要把这n个靶子全部射穿才行。
一开始,海未的精力为m,力度为a。每射穿一个靶子,海未对弓的熟练度就会上升,此时力度会增加b。
每个靶子都有一个单独的耐久度d[i],每次受到海未的攻击,靶子的耐久度都会减少海未当前的力度的值。当靶子的耐久度为0或0以下时,靶子被破坏。但是,如果海未在一次射箭后并没有射穿这个靶子,海未的精力会减少c[i]。如果海未通过一次射箭破坏了靶子,她的精力不会受到影响。
海未可以自由地选择射靶子的顺序。请问,海未是否能够通过合理地安排射靶子的顺序,使得她能够将这些靶子全部射穿?如果能,她完成任务后最多能省下多少精力?如果不能,她最多可以射穿多少个靶子?
Input
输入的第一行为四个正整数n,m,a,b。 接下来n行,每行两个正整数c[i],d[i]。
Output
输出的第一行仅包含一个字符串。请回答海未酱是否能完成全部射穿靶子的任务。 如果可以完成,输出“Yes”。 如果不能完成,输出“No” 。(两者均不包括引号)
第二行仅包含一个正整数。若第一行为“Yes”,则你应输出所剩的最多精力值;若第一行为“No”,则你应输出最多能射穿的靶子数。
Sample Input
2 10 1 1
1 4
1 6
Sample Output
Yes
5
Hint
对于30%的数据,n<=6。
对于50%的数据,n<=9。
对于70%的数据,n<=14。
对于100%的数据,n<=21;1<=a,b,c,d<=32767。
题解
这种原创题 估计找到这里来的都是学弟学妹
首先可见50%的数据是给暴搜的
然后看数据范围以及最近被状压洗脑 决定像生日蛋糕一样暴搜加鬼畜剪枝试图A掉
如果这种组合已经出现过,并且现在没有曾经优的话 剪掉。用二进制储存组合,2^21问题不大
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int c[27];
int d[27];
int n,m,a,b;
inline int read()
{
char ch=getchar();
int x=0;bool s=0;
while(ch<'0'||ch>'9'){if(ch=='-')s=1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return s?-x:x;
}
inline void scan()
{
n=read(),m=read(),a=read(),b=read();
for(register int i=0;i<n;++i)
c[i]=read(),d[i]=read();
return;
}
int f[2100007];
int ans=0;
int last=-1,maxx=0;//last存余量(初始化为-1可以兼具检测是否扫完功能) maxx存最多能打几块板
void search(int x)
{
for(register int i=0;i<n;++i)
if(!(ans&(1<<i)))
{
ans=ans|(1<<i);
int mo;
mo=d[i]%a==0?d[i]/a-1:d[i]/a;
m-=mo*c[i];
a+=b;
if(x==n-1)last=max(last,m);
else if(m<1)maxx=(m==0?max(maxx,x+1):max(maxx,x));
else if(f[ans]<m){f[ans]=m;search(x+1);}
a-=b;
m+=mo*c[i];
ans=ans^(1<<i);
}
return;
}
int main()
{
scan();
//memset(f,127,sizeof(f));
search(0);
if(last==-1){printf("No\n%d",maxx);return 0;}
printf("Yes\n%d",last);
return 0;
}
以及代码中有很多莫名其妙的表达方法
是我跟出题人pb大爷为了把90卡成100花了一个小时瞎几巴乱调的
/最后还是A啦2333
「LuoguT36048」 Storm in Lover的更多相关文章
- GNU C库「glibc」getaddrinfo 发现重大漏洞
本文翻译至:http://www.itmedia.co.jp/enterprise/articles/1602/17/news065.html 大部分Linux应用程序使用的GNU C库「glibc」 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 「2014-3-17」C pointer again …
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
随机推荐
- 浅谈云网融合与SD-WAN
一.引言 近年来,SD-WAN作为一项新技术在行业应用领域里快速发展,企业对SD-WAN的接受度日渐提升,各厂商也纷纷提出解决方案.随着全球云计算领域的活跃创新和我国云计算发展进入应用普及阶段,越来越 ...
- Python3 MySQL 数据库连接 - PyMySQL 驱动 笔记
sql插入语句(推荐): str_mac = "nihao" # SQL 插入语句 sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ L ...
- Spark学习(三): 基本架构及原理
Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和St ...
- SQL数据分组后取最大值或者取前几个值(依照某一列排序)
今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...
- MySQL和MongoDB的性能测试
软硬件环境 MySQL版本:5.1.50,驱动版本:5.1.6(最新的5.1.13有很多杂七杂八的问题) MongoDB版本:1.6.2,驱动版本:2.1 操作系统:Windows XP SP3(这个 ...
- JS判断访问设备(userAgent)加载不同页面 JS判断客户端操作系统类型(platform)
//平台.设备和操作系统 var system ={ win : false, mac : false, xll : false }; //检测平台 var p = navigator.platfor ...
- JQuery插件ajaxFileUpload 异步上传文件
一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事 ...
- 下载Google官方/CM Android源码自己主动又一次開始的Shell脚本
国内因为某种原因,下载CM或Google官方的Android源码总easy中断.总看着机器.一中断就又一次运行repo sync还太麻烦,所以我特意编写了一段shell脚本(download.sh). ...
- 写入文本文件时“\n”不是回车换行而是个方块“■”的解决方法
用“\n”写入文本文件时,打开文本文件显示的为什么不是回车换行而是个黑方块“■”,但用file()读取时还是认为是一行一行的? 首先在WINDOWS里回车换行是"\r\n"; 而L ...
- http权威指南(一)-Http概述
Http概述 在Web中,不管是浏览器还是server都是通过Http相互通信的.那么Http是怎样工作的呢? 首先,client向server发送Http请求,server会在Http响应中回送所请 ...