week12-作业(动态规划)

2023-05-16

C - 必做题 - 3

东东每个学期都会去寝室接受扫楼的任务,并清点每个寝室的人数。
每个寝室里面有ai个人(1<=i<=n)。从第i到第j个宿舍一共有sum(i,j)=a[i]+…+a[j]个人
这让宿管阿姨非常开心,并且让东东扫楼m次,每一次数第i到第j个宿舍sum(i,j)
问题是要找到sum(i1, j1) + … + sum(im,jm)的最大值。且ix <= iy <=jx和ix <= jy <=jx的情况是不被允许的。也就是说m段都不能相交。
注:1 ≤ i ≤ n ≤ 1e6 , -32768 ≤ ai ≤ 32767 人数可以为负数。。。。(1<=n<=1000000)
Input
输入m,输入n。后面跟着输入n个ai 处理到 EOF
Output
输出最大和
Sample Input

1 3 1 2 3
2 6 -1 4 -2 3 -2 3

Sample Output

6
8 

思路:

最大m区间和的问题
序列有n个数,选择m个不交叉的子序列,相加找出来最大值。dp[][]为前j个数取了i段的最大和。
利用状态转移方程:dp[ i ][ j ] = max(dp[ i-1 ][ k ] + a[ j ],dp[ i ][ j-1 ] + a[ j ]) (i-1 <= k <= j-1)
与最后一段合并是dp[ i ][ j-1 ] + a[ j ],成为新的一段dp[ i-1 ][ k ] + a[ j ]。
k的那个循环其结果可以由上一次循环j的时候算出来也就是dp[i][j]只需要知道dp[i][j-1]和dp[i-1][k]的最大值,因此可以用一维数组。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int a[1000010],b[1000010],c[1000010];
int main()
{
	int m, n;
	int maxt;
	while (cin >> m >> n)
	{
		for (int i = 1; i <= n; i++)
			cin >> a[i];
		memset(b, 0, sizeof(b));
		memset(c, 0, sizeof(c));
		for (int i = 1; i <= m; i++)
		{
			maxt = -10000000;
			for (int j = i; j <= n; j++)
			{
				b[j] = max(b[j - 1], c[j - 1]) + a[j];
				c[j - 1] = maxt;
				maxt = max(maxt, b[j]);
			}
		}
		cout << maxt << endl;
	}
}

D - 选做题 - 1

题意:

我们给出以下“正则括号”序列的归纳定义:
空序列是一个普通的括号序列,
如果s是一个正则方括号序列,那么(s)和[s]是正则方括号序列,并且
如果a和b是正则中括号序列,那么ab就是一个正则中括号序列。
没有其他序列是一个普通的括号序列
例如,下面所有的字符序列都是正则括号序列:
(), [], (()), ()[], ()[()]
而下列字符序列不是:
(, ], )(, ([)], ([(]
给定一个括号序列字符a1a2…an,你的目标是找到最长的普通括号序列的长度是s的子序列。
也就是说,你希望找到最大的m,使得指数i1, i2,…,im中的1≤i1 <i2 & lt;…& lt;im≤n, ai1ai2…aim是一个规则的括号序列。
给定初始序列([([]]),子序列中最长的正则括号为[([])]
input
输入测试文件将包含多个测试用例。每个输入测试用例由一行组成,其中只包含字符(、)、[和];每个输入测试的长度都在1到100之间。文件结束由包含单词“end”的行标记,不应该被处理。
output
对于每个输入情况,程序应该将最长的可能的正则括号子序列的长度打印在一行上。
Sample Input

((()))
()()()
([]])
)[)(
([][][)
end

Sample Output

6
6
4
0
6

思路:

对于长度为1的串一定为1,长度为0的串一定为0
对于子序列可以设状态转移方程 f[i][j]=min{f[i][k]+f[k+1[[j]}(i<=k<j)

1对于[]:f[i][j]=min{f[i+1][j-1]}即两边同时缩减开始
2对于[或者( f[i][j]=min{f[i+1][j]+1}
3对于]或者)f[i][j]=min{f[i][j-1]+1}
对于上述的所有情况取出最小值就是最终的结果f[i][j]

代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int main()
{
	string s;
	int a[110][110];
	cin >> s;
	while (s != "end")
	{
		memset(a, 0, sizeof(a));
		for (int i = 2; i <= s.size(); i++)
		{
			for (int j = 0; j < s.size() - i + 1; j++)
			{
				int t = j + i - 1;
				if ((s[j] == '(' && s[t] == ')') || (s[j] == '[' && s[t] == ']'))
					a[j][t] = a[j + 1][t - 1] + 2;
				for (int x = j; x < t; x++)
					a[j][t] = max(a[j][t], a[j][x] + a[x + 1][t]);
			}

		}
		cout << a[0][s.size() - 1] << endl;
		cin >> s;
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

week12-作业(动态规划) 的相关文章

随机推荐

  • Ubuntu配置全局系统代理(常用工具配置)

    Ubuntu配置全局系统代理 xff08 常用工具 xff09 问题描述解决方法配置系统代理终端部分配置配置apt代理配置curl wget pip代理git相关代理的设置配置docker代理 问题描述 公司电脑网络规则做了限制 xff0c
  • Deepin中使用Windows字体

    本方案适用与Windows与Deepin 双系统的用户 xff08 以及所有Win与Linux双系统 xff09 只需要把Windows下 Windows Fonts的文件夹 复制到 Deepin下 usr share fonts 额外项
  • 无线攻击 --Fern WiFi Cracker(图形化无线密码破解工具 )

    文章目录 一 用法概述1 1 概述1 2 优点1 3 缺点 二 WiFi破解实验2 1 操作环境2 2 操作过程 一 用法概述 1 1 概述 Fern WiFi Cracker是一个使用Python编程语言和Python Qt GUI库编写
  • node 连接数据库进行增删改查

    导入模块 const mysql 61 require 34 mysql 34 建立 const db 61 mysql createPool host 34 127 0 0 1 34 user 34 root 34 password 34
  • Linux 虚拟机和主机互通 [万能方法]

    VMware Linux 虚拟机和主机互通 万能方法 前言 xff1a 诸如以下问题 xff0c 解决问题的思路都是一样的 xff0c 看完此文后都能找到答案 xff1a 主机为何 ping 不通 虚拟机 xff1f 请检查是否在同一网段
  • 洛谷 P2651 添加括号III

    思路 xff1a a1肯定是分子 xff0c a2肯定是分母 xff0c 只要确认a1a3a4 a2是否是整数 只要确认a1a3a4 a2是否是整数 每次将a2 61 a2 gcd a2 ai i 61 1 3 4 5 即可约分 span
  • Win10系统重装教程(纯净版)

    文章目录 一 提示二 制作系统u盘1 官网下载工具2 选择 立即下载工具 xff0c 然后选择 运行 3 选择 为另一台电脑创建安装介质 xff0c 然后选择 下一步 4 选择对应的Windows版本 xff0c 然后点击 下一步 5 选择
  • Web安全—CSRF漏洞利用(pikachu)

    Web安全 CSRF漏洞利用 前言 xff1a 此篇文章主要记录pikachu靶场漏洞中三种模式的CSRF漏洞的利用 xff0c 此处不对基本原理进行过多赘述 xff0c 基础可参考文章 xff1a Web安全 跨站请求伪造攻击 xff08
  • 1034: 字典序最小的子序列(单调队列)

    题目描述 PIPI有一个字符串S xff0c 现在它想刁难刁难一下聪明的你 xff0c 首先它给你一个整数K xff0c 要你找出字典序最小的字符串T xff0c 并且字符串T满足 xff1a T由S的子序列构成 xff08 如S 61 a
  • Ubuntu server 18.04配置lftp过程libtinfo.so.6 error解决方法

    基本情况 服务器型号 xff1a DELL PowerEdge T440 系统版本 xff1a ubuntu 18 04 4 live server amd64 iso 配置lftp 按如下命令安装 xff1a sudo apt get u
  • (RPA)手把手——正则表达式基本使用(二)

    艺赛旗 RPA9 0全新首发免费下载 点击下载 http www i search com cn index html from 61 line1 重复次数 后面跟着元字符 43 or 的 用来指定匹配子模式的次数 这些元字符在不同的情况下
  • Python序列类型的切片

    序列类型的切片 在字符串 列表 元组三种序列类型中的切片方法一致 xff0c 都是使用变量名 43 开始索引值 结束索引值 xff1a 步长 的方式 xff0c 若是步长省略则步长默认为1 步长 xff0c 顾名思义就是一步有多长 xff0
  • 当url中出现“#“号时,“#“及其后面的字符串都会被忽略

    url中出现 34 号时 xff0c 34 及后面参数为null 解决方法 xff1a 传参就用escape 函数转义 原理 xff1a 当url中出现 34 号时 xff0c 及其后面的字符串都会被忽略 xff0c 不会被发送到服务器 x
  • springboot项目打成jar包后,放在linux系统上运行时出现文件空指针等问题

    场景 xff1a 使用springboot搭建Fabric java sdk的客户端项目 xff0c 需要将Fabric网络生成的密钥和证书的文件夹拷贝到项目的资源目录或者config包下 xff0c 在配置文件中配置各种证书的路径 xff
  • Ubuntu常见问题解决

    Ubuntu常见问题解决 1 ubuntu系统上安装qt5 12后无法调试运行 原因 xff1a 缺少gcc g 43 43 make libgl1 sudo apt span class token operator span get i
  • vscode 配置 copilot(最牛逼的AI智能提示)

    copilot github 如果绑定了学校邮箱 申请免费资格 https link zhihu com target 61 https 3A github com features copilot signup vscode 更新到最新版
  • OpenCV4.7+VS2019环境变量配置

    OpenCV4 7 43 VS2019配置 1 下载OpenCV并解压安装2 配置环境 xff08 1 xff09 配置环境变量 xff08 2 xff09 将系统改成x64 xff08 3 xff09 配置包含目录 xff08 4 xff
  • win10下mysql的下载、安装以及SSL配置超详解教程

    mysql 5 7 28 winx64的下载 安装以及SSL配置教程 1 下载mysql 压缩文件2 安装教程3 安装mysql 5 7 28 winx643 1 解压缩3 2 配置my ini文件3 3 配置环境变量3 4 安装 open
  • java获取jar包中的文件资源

    java获取jar包中的文件资源 一 问题示例1 1 项目开发时1 2 打包成jar后 二 解决方案2 1 解决方法2 2 实现 问题描述 xff1a 我们常常在代码中读取一些资源文件 比如图片 xff0c 音乐 xff0c 文本等等 在单
  • week12-作业(动态规划)

    C 必做题 3 东东每个学期都会去寝室接受扫楼的任务 xff0c 并清点每个寝室的人数 每个寝室里面有ai个人 1 lt 61 i lt 61 n 从第i到第j个宿舍一共有sum i j 61 a i 43 43 a j 个人 这让宿管阿姨