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. VMware虚拟机下安装hadoop1.x

    这是Hadoop学习全程记录第1篇,在这篇里我将介绍一下如何在Linux下安装Hadoop1.x. 先说明一下我的开发环境: 虚拟机:VMware8.0: 操作系统:CentOS6.4: 版本:jdk ...

  2. Codeforces 665C Simple Strings【暴力,贪心】

    题目链接: http://codeforces.com/contest/665/problem/C 题意: 改变最少的字符,使得最终序列无相同的连续的字符. 分析: 对每一个与前一个字符相同的字符,枚 ...

  3. Execption异常 手动和自动抛除异常

    package cn.zmh.Exception; /* * * try{ * 需要被检测的语句 * } * catch(异常类 变量){ * 异常的处理语句 * } * finally{ * 一定会 ...

  4. Linux下使用Shell命令控制任务Jobs执行(转)

    一.下列命令可以用来操纵进程任务: ps列出系统中正在运行的进程. kill发送信号给一个或多个进程(经常用来杀死一个进程). jobs列出当前shell环境中已启动的任务状态,若未指定jobsid, ...

  5. 普元OA平台介绍

    Primeton Portal提供了访问企业信息资源的统一入口,是一个面向企业的内容管理.信息发布和集成展现平台,提供了单点登录.内容管理.信息发布.应用集成.个性化等功能,能够帮助企业快速搭建一个集 ...

  6. [LeetCode][Java] Container With Most Water

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  7. FineReport实现java报表报表展示的效果图

    Java报表-动态折叠树 Java报表-段落明细表 Java报表-多层统计 Java报表-多源分片与冻结 Java报表-发票套打表 Java报表-非统一页面打印 Java报表-复杂票据 Java报表- ...

  8. 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯

    1      前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...

  9. mongoVUE 破解方法

    mongoVUE1.5.3的破解方法其实很简单 注册表中查找B1159E65-821C3-21C5-CE21-34A484D54444中的子项4FF78130 ,删除其下的三个子项即可. 开始-运行- ...

  10. 用C++、Qt实现的小游戏2048

    窗口布局与游戏截图: 实现思路: 1.使用二维数组模拟整个游戏网格,并将二维数组中每个数的大小用作游戏中每个网格中的数据. 2.将对游戏的数据及数据的操作(即玩家的操作对游戏数据的影响)作为一个类,游 ...