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的更多相关文章

  1. GNU C库「glibc」getaddrinfo 发现重大漏洞

    本文翻译至:http://www.itmedia.co.jp/enterprise/articles/1602/17/news065.html 大部分Linux应用程序使用的GNU C库「glibc」 ...

  2. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  3. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  4. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

随机推荐

  1. git(一):了解、学习、安装git

    自述 一直到今天才真正的去了解学习使用git,看<git权威指南>这本书的第一篇,忽然有很多共鸣,比如在大学开始编程的时候,总是把写的所有demo和项目保存在U盘里,内存不够用就改为移动硬 ...

  2. CODEVS_1227 方格取数2 网络流 最小费用流 拆点

    原题链接:http://codevs.cn/problem/1227/ 题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1, ...

  3. 解决Eclipse中SVN版本信息不显示的问题

    eclipse  中使用 svn 插件,原本正常,未作任何更改,最近几天突然eclipse 中查看文件时,文件后面的 版本号 . 文件的状态图标 等等都不见了.以为有插件冲突,卸载了好多其他的相关的插 ...

  4. Java截取视频首帧并旋转正向

    package test; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import j ...

  5. JDK动态代理理解精髓

      1.Java动态代理的关键是:Proxy类要和InvocationHandler的接口实现类,要用同一个目标target对象class,所以精髓是InvocationHandler和Proxy是一 ...

  6. android 打开浏览器指定网页

    <?xml version="1.0" encoding="utf-8"?> <!-- 定义当前布局的基本LinearLayout --> ...

  7. HDU 2009 整除的尾数 题解

    Problem Description 一个整数,仅仅知道前几位,不知道末二位.被还有一个整数除尽了.那么该数的末二位该是什么呢?   Input 输入数据有若干组,每组数据包括二个整数a,b(0&l ...

  8. 批量修改文件权限 和所有者 chown nobody:nobody * -R chmod 775 * -R

    chown nobody:nobody * -R chmod 775 * -R

  9. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  10. 重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)

    你能保证你的程序不会出问题吗? 不能 当你的程序执行到某个地方发生了你不想要的结果.你是否想让它一错再错? 不想 你是否想让你的程序占着茅坑不拉屎? 不想 你是否想知道你的程序出错的原因? 想 个问题 ...