Nico Nico Ni~(完全背包)

Time Limit:2000MS  Memory Limit:65535K

Type: Program   Language: Not Limited

Description

Lys plays Love Live game now. You can level up via playing songs and get experiences ei but consume
spirit si.  Initially, you have n songs and spirit SP, empty experience. When you get enough experience,
you step in next level, and the experience you got flush to empty and the spirit will be filled full.
What’s more, when you step in next level, the total spirit SP will increase c, means you have c extra
spirit to consume, and required q more experiences to step in next level.
Now give you n songs, and the experience you can get and the spirit you should consume of each song.
The initially spirit SP you have, the first level experience requirement.  You can tell how the level
you can step in?

Input

First line has one integer t, the number cases.
For each case, first line, n(1<=n<=10), n songs,  SP(1<=SP<=1000), the initial spirit, EP(1<=EP<=100000),
the first level requirement experiences,
c(1<=c<=100), the extra spirit you can get for each level,
q(1<=q<=100), the extra requirement experiences for each level.
Next n lines, for each line, has two integers, s, e,  consume spirit s and get experiences e for
each song.

Output

For each case, print the most level you can get. If the level is larger than 10000, you should only
output 10000.

Sample Input

1
2  10  10  5  6
3  3
4  4

Sample Output

2

Hint

Before playing the song, you have 10 spirit, and require 10 experience to step into next level.
You can play the first song two times and the second song one time, consume 10 spirt, and get 10
experiences, step level 2. And spirt become 15, and require 16 experiences to next level. Then
you can not step into next level with this spirit.

思路:完全背包,每一次在背包容量为sp时,获得的最大价值为mv,当mv大于等于ep时,表示能升级,此时背包容量扩充为 sp + c, 升级条件变为 mv >= (ep + q)而随着背包容量的扩充,之前的dp[]已经保存了对应状态的最优值,故不必重新dp一遍

 1 /*
 2     times 108ms
 3     by orc
 4 */
 5 #include <cstdio>
 6 #include <iostream>
 7 #include <cstring>
 8 #include <algorithm>
 9 #include <queue>
10 #include <set>
11 using namespace std ;
12 int n, sp, ep, c, q ;
13 int s[15], e[15] ;
14 int nsize ;
15 int dp[1100000] ;
16 int getans(int cur)
17 {
18     int& res = dp[cur] ;
19     if(res != -1) return res ;
20     res = 0 ;
21     for(int i = 1; i <= n; ++i)
22         if(cur >= s[i])
23         res = max(res,getans(cur - s[i]) + e[i]) ;
24     return res ;
25 }
26 int main()
27 {
28     #ifdef LOCAL
29     freopen("in.txt","r",stdin) ;
30     #endif
31
32     int t ;
33     scanf("%d",&t) ;
34     while(t--)
35     {
36         scanf("%d%d%d%d%d",&n,&sp,&ep,&c,&q) ;
37         for(int i = 1 ; i <= n; ++i) scanf("%d%d",&s[i],&e[i]) ;
38         int nsize = sp, lev = 1;
39              memset(dp, -1 ,sizeof dp) ;
40               while(1)
41               {
42                   int now = getans(nsize) ;
43                 //  printf("[%d]\n",now) ;
44                   if(now >= ep) {lev++; nsize += c ; ep += q ;}
45
46                   else break ;
47                   if(lev >= 10000) break ;
48               }
49               if(lev >= 10000) printf("10000\n") ;
50               else printf("%d\n",lev) ;
51     }
52
53 }

时间: 2024-10-14 15:33:23

Nico Nico Ni~(完全背包)的相关文章

2018-05-18课堂笔记

2018-05-18课堂笔记 目录 一.用户配置文件和密码配置文件 二.用户组管理 三.用户管理 四.usermod命令 五.用户密码管理 六.mkpasswd命令 七.su命令 八.sudo命令 九.限制root远程登录 一.用户配置文件和密码配置文件 1.用户文件/etc/passwd [[email protected] ~]# head -n 5 /etc/passwd //从/etc/passwd文件可以看到,第一行都包括7个字段,第个字段间用":"分隔 //格式 用户名:密

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

Gym101341题解

难度分类 (div2A-B):B C D G H M (div2C-D):E K (  div2E  ):A J I 喵喵喵:F L A. B. 题意:给一个长度为2~2e5的串,交换两个字符,要求最后没有"happiness" 坑点:本来没有"happiness",交换一把,出现了"happiness",这下好! code1:(比赛时的,一点也不典雅~) #include <iostream> #include <vector

ZOJ 3886 Nico number(线段树)

Nico Number Time Limit: 2 Seconds      Memory Limit: 262144 KB Kousaka Honoka and Minami Kotori are playing a game about a secret of Yazawa Nico. When the game starts, Kousaka Honoka will give Minami Kotori an array A of N non-negative integers. Ther

ZOJ 3886 Nico Number (线段树)

题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半.然后想到了这点就很好做了.对于区间取模更新操作可以直接暴力更新,维护一个最大值,如果这个区间的最大值小于模的话, 就不用继续向叶子更新了.然后其他的大于模的就更新到叶子节点. 然后对于NicoNumber来说,只有6,2的幂次和素数来说是符合的.所以可以预处理出来.然后就可以用线段树来维护了. 代码如下: #include <

Nico Game Studio 3.地图纹理编辑 物体皮肤编辑

完成功能: 1.地图纹理编辑功能. 图层编辑,添加/删除纹理,地图编辑.网格绘制. 2.物体编辑器:皮肤编辑器. 这块内容比较多: 动态纹理编辑器: 单个皮肤的编辑器. 编辑帧序列,预览动画. 进度实在慢的可以.. 控件和窗体等关于界面的美化,打算放在后面做. 下面的安排 1:完成地图编辑器的功能. 包括:物体,单位,技能编辑器; 以及在地图上放置物体和单位;多地图编辑的功能. 2:完成交互功能. 包括:地图物理属性构建, 玩家控制的角色移动 , 可交互物体的功能实现. 3:游戏基础逻辑实现.

Nico Game Studio 2.设置页面读写 纹理载入与选择

进度十分之慢... 配置读写一样采用之前写的自动绑定的方法: 分享一下代码: SetControl是把数据写到control上的. SetObject是把数据写到对象上 GetData是从控件读取数据,并获得包含这些数据的实例; public static void SetControl(this Control control, object data) { var type = data.GetType(); Dictionary<string, object> values = new

Nico Game Studio 1.基本UI和地图编辑基础功能

完成了基本界面. 本来想自画UI,但是考虑到工作量较大和美观程度有限,以及工具使用对象是比较初级玩家,处于性价比和最初目的,放弃了自绘. 虽然个人比较喜欢黑色,但是工具开发来是给大家用的,而且面向初级使用者,所以还是比较简单界面容易上手. 于是变成这样. 这里的树view还是自绘了一下,原来+号不适用. 目前进度比较慢. 总是做一步要想很多,后面是否会需要修改地方,怎么样做最优. 对于初学游戏开发者,这样的界面应该比较习惯,接受快把. 目前完成内容: 1.基本UI框架,地图增删改 2.编辑单个地

ZOJ 3886 Nico Number(筛素数+Love(线)Live(段)树)

problemCode=3886">ZOJ 3886 题意: 定义一种NicoNico数x,x有下面特征: 全部不大于x且与x互质的数成等差数列,如x = 5 ,与5互素且不大于5的数1,2,3,4成等差数列.则5是一个NicoNico数. 再定义三种操作: 1.南小鸟询问[L, R]内有多少个NicoNico数: 2.果皇把[L, R]内的数全部对v取余: 3.果皇将第K个数换成X. 然后给你一个数列,并对这个数列运行若干操作 思路: 这样的问题果断要用LoveLive树线段树来做! 首