首页 > 其他分享 >信息学奥赛一本通 1292:宠物小精灵之收服

信息学奥赛一本通 1292:宠物小精灵之收服

时间:2024-12-06 23:04:07浏览次数:7  
标签:10 样例 收服 小精灵 小智 奥赛 1292 皮卡丘


时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。

一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。当小智的精灵球用完时,狩猎也宣告结束。

我们假设小智遇到野生小精灵时有两个选择:收服它,或者离开它。如果小智选择了收服,那么一定会扔出能够收服该小精灵的精灵球,而皮卡丘也一定会受到相应的伤害;如果选择离开它,那么小智不会损失精灵球,皮卡丘也不会损失体力。

小智的目标有两个:主要目标是收服尽可能多的野生小精灵;如果可以收服的小精灵数量一样,小智希望皮卡丘受到的伤害越小(剩余体力越大),因为他们还要继续冒险。

现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。请问,小智该如何选择收服哪些小精灵以达到他的目标呢?

【输入】

输入数据的第一行包含三个整数:N(0<N<1000),M(0<M<500),K(0<K<100),分别代表小智的精灵球数量、皮卡丘初始的体力值、野生小精灵的数量。

之后的K行,每一行代表一个野生小精灵,包括两个整数:收服该小精灵需要的精灵球的数量,以及收服过程中对皮卡丘造成的伤害。

【输出】

输出为一行,包含两个整数:C,R,分别表示最多收服C个小精灵,以及收服C个小精灵时皮卡丘的剩余体力值最多为R。

【输入样例】

10 100 5
7 10
2 40
2 50
1 20
4 20

【输出样例】

3 30

【提示】

样例输入2:

10 100 5

8 110

12 10

20 10

5 200

1 110

样例输出2:

0 100

提示:

对于样例输入1:小智选择:(7,10) (2,40) (1,20) 这样小智一共收服了3个小精灵,皮卡丘受到了70点伤害,剩余100-70=30点体力。所以输出3 30。

对于样例输入2:小智一个小精灵都没法收服,皮卡丘也不会收到任何伤害,所以输出0 100。

超难背包

最高难度

一命速通!

AC代码

直接启动!

#include<bits/stdc++.h>
using namespace std;
int w[1001],c[1001],s[1001][1001];
int main(){
    int i,j,k,n,m,v;
    cin>>n>>m>>v;
    for(i=1;i<=v;i++)
    {
        cin>>w[i]>>c[i];
    }
    for(i=1;i<=v;i++)
    {
        for(j=n;j>=w[i];j--)
        {
            for(k=m;k>=c[i];k--)
            {
                s[j][k]=max(s[j][k],1+s[j-w[i]][k-c[i]]);
            }
        }
    }
    for(k=1;k<=m;k++)
    {
        if(s[n][m]==s[n][k])
        {
            cout<<s[n][m]<<" "<<m-k<<endl;
            break;
        }
    }
}

标签:10,样例,收服,小精灵,小智,奥赛,1292,皮卡丘
From: https://blog.csdn.net/2401_83082454/article/details/144301992

相关文章

  • 信息学奥赛模版合集
    文章目录CSP-S/NOIP实用模版前言杂项快读快写关闭同步流归并排序求逆序对动态规划最长公共子序列背包01背包完全背包多重背包树上背包(包含另外两种背包)数学欧拉筛&欧拉函数数据结构ST表树状数组区间修改单点查询版区间修改区间查询版二维树状数组线段树区间乘法&......
  • 信息学奥赛一本通1336:【例3-1】找树根和孩子(同东方博宜OJ 2188. 找树根)
    【题目描述】给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子。【输入】第一行:n(结点个数≤100),m(边数≤200)。以下m行:每行两个结点x和y,表示y是x的孩子(x,y≤1000)。【输出】第一行:树根:root;第二行:孩子最多的结点max;第三行:max的孩子(按编号由小到大输出)。【输......
  • CSP/信奥赛C++语法基础刷题训练(33):洛谷P1055:[NOIP2008 普及组] ISBN 号码
    CSP/信奥赛C++语法基础刷题训练(33):洛谷P1055:[NOIP2008普及组]ISBN号码题目描述每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括999位数字、......
  • CSP/信奥赛C++语法基础刷题训练(34):洛谷P2241:统计方形
    CSP/信奥赛C++语法基础刷题训练(34):洛谷P2241:统计方形题目背景1997年普及组第一题题目描述有一个n×mn\timesm......
  • 信息学奥赛一本通 1329:【例8.2】细胞(同东方博宜OJ 1907. 有多少细胞)
    【题目描述】一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列4100234500067103456050020456006710000000089有4个细胞。【输入】第一行为矩阵的行n和列m;下面为一个n×m的......
  • 信息学奥赛一本通 1249:Lake Counting
    【题目描述】题意:有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?【输入】第一行为N,M(1≤N,M≤110)。下面为N*M的土地示意图。【输出】一行,共有的水洼数。【输入样例】1012W........WW......
  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
    CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),......
  • 【信奥赛·算法基础】CSP-J C++ 贪心算法示例汇总
    序言为了更清晰的了解贪心算法,我把常见的贪心算法示例做了一个总结,把问题和策略,以及代码示例放到了一起,方便学习和分析,这里示例仅以C++为例,其他语言可根据示例调整即可一、钱币找零问题问题描述:给定不同面额的钱币以及每种面额的数量,用最少的钱币张数凑齐给定的总金额。......
  • 突破信息学奥赛生天花板
    1.我是谁信息学的老师有很多被称作名师的,并不多我,小周老师就是其中之一到底什么叫名师呢这是我手把手带出来的学生,具化一下:CSP-J三等奖CSP-S初赛远远超过西藏分数线NOIP差一点\(200\)分去打了。这下不怎么抽象了吧2.习惯都说名师出高徒成千上万的家长想......
  • 信息学奥赛复赛复习13-CSP-J2021-02插入排序-排序稳定性、插入排序、sort排序、结构体
    PDF文档公众号回复关键字:202410061P7910[CSP-J2021]插入排序[题目描述]插入排序是一种非常常见且简单的排序算法。小Z是一名大一的新生,今天H老师刚刚在上课的时候讲了插入排序算法。假设比较两个元素的时间为O(1),则插入排序可以以O(n^2)的时间复杂度完成长度为......