#26. 打气球——Yucai OJ第18次测试

2023-10-13 15:30
文章标签 18 26 oj 气球 次测试 yucai

本文主要是介绍#26. 打气球——Yucai OJ第18次测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

ML很喜欢一个打气球的游戏,游戏规则如下: 初始状态,有n行m列的气球,ML有k发子弹。ML每次可以使用一发子弹,打爆某一列最下面的一个气球,并得到相应的分数。如图所示:

某一些气球被打爆以后,ML可以得到一发子弹的奖励。当ML使用完所有子弹或者所有的气球被打爆,游戏结束。 已知每一个气球被打爆的得分以及被打爆以后是否会奖励ML子弹,求游戏结束时,ML的最大得分。

输入格式

第1行包含3个整数 n m k。 接下来n行每行包含m个由正整数a和字符b组成的二元组,第i行第j个二元组表示第i行第j列的气球得分为a,如果b等于’Y’表示打爆该气球会奖励子弹,等于’N’表示不会奖励子弹。

输出格式

输出一个整数,表示ML的最大得分。

样例输入

3 4 2
9 N 5 N 1 N 8 N
5 N 5 Y 5 N 5 N
6 N 2 N 4 N 3 N

样例输出

13

数据规模和约定

对于20%的数据,满足1<=n,m<=5,1<=k<=10,所有的字符c都为N;

对于50%的数据,满足1<=n,m<=200,1<=k<=200,所有的字符c都为N;

对于100%的数据,满足1<=n,m<=200,1<=k<=200,字符c可能为Y;

对于100%的数据,所有的f值都满足1<=f<=10000。

题解

dp+公式+暴力。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=201;
 4 int n,m,k,a[MAXN][MAXN];
 5 int sy[MAXN][MAXN],sn[MAXN][MAXN];
 6 int fy[MAXN][MAXN],fn[MAXN][MAXN];
 7 bool b[MAXN][MAXN];
 8 int main(){
 9     cin>>n>>m>>k;
10     for(int i=1;i<=n;i++){
11         for(int j=1;j<=m;j++){
12             char c;
13             cin>>a[i][j]>>c;
14             if(c=='Y'){
15                 b[i][j]=1;
16             }else{
17                 b[i][j]=0;
18             }
19         }
20     }
21     for(int i=1;i<=m;i++){
22         int cnt=0;
23         for(int j=n;j>=1;j--){
24             if(b[j][i]==1){
25                 sy[i][cnt]+=a[j][i];
26             }else{
27                 cnt++;
28                 sy[i][cnt]=sy[i][cnt-1]+a[j][i];
29                 sn[i][cnt]=sy[i][cnt-1]+a[j][i];
30             }
31         }
32     }
33     for(int x=1;x<=m;x++){
34         for(int y=0;y<=k;y++){
35             for(int z=0;z<=n && z<=y;z++){
36                 fy[x][y]=max(fy[x][y],fy[x-1][y-z]+sy[x][z]);
37                 if(z!=0){
38                     fn[x][y]=max(fn[x][y],fy[x-1][y-z]+sn[x][z]);
39                 }
40                 if(y-z>0){
41                     fn[x][y]=max(fn[x][y],fn[x-1][y-z]+sy[x][z]);
42                 }
43             }
44         }
45     }
46     cout<<fn[m][k]<<endl;
47     return 0;
48 }
标程

 

转载于:https://www.cnblogs.com/VOCAOID/p/9562466.html

这篇关于#26. 打气球——Yucai OJ第18次测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204154

相关文章

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

18. 4 Sum

题目: 解答: 与之前的三数之和的解法类似,也是先排序,然后不断剔除不可能的条件,最后两个参数,通过两头求和计算得出。 代码: class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;int len = nums.size

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

PHP 验证身份号码 包括15位18位

查了很多资料 发现网上身份证15位的验证并不是那么严谨  今天研究了一下  代码如下 <?phpfunction check_id_card($num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return fa