N 组连续子串最大和

  数组 a 中有 M 个数 , 将 M 个数分成 N 组 , 并且每组中的数据顺序和原数组中的顺序保持一致,求 N 组中的数据之和最大为多少?

  向 dp 数组中赋初始值 ,如果 M == N ,则 dp[ i ][ i ] = dp[ i - 1 ][ i - 1 ] + a[ i ] ;

  若N为1时 ,即为求连续子串最大和问题;

  假设dp[ 1 ][ i ] ( 2 =< i <= M) 代表 与第 i 个数组成连续子串的最大和,当dp[ 1 ][ i - 1 ] < 0 时 , a[ i ] 独立作为一个子串 , 即 dp[ 1 ][ i ] = max ( dp[ 1 ][ i -1 ] + a[ i ] , a[ i ] ) ;很需要注意的一点是:dp[ 1 ][ i ] 不一定是 i 个数中连续子串的最大和。

分别求出数组中有一个数、两个数、三个数……M个数中连续子串的最大和,用dp[ i ][ 1 ] 来表示;

  若N为2时,表示将M个数分成 2 组 ,求两组数中的和最大 ;

  dp[ 2 ][ i ] ( 3 =< i <= M ) 代表 与第 i 个数组成连续子串,形成两个连续子串中,第2个子串的最大和;

  可知,第二个子串可以单独成为一段,最终形成两段,也可以和上一个段一起形成一段,最终形成两段;

所以 dp[M][N]  代表 与第M个数组成的连续子串的最大和,但不一定是 M 个数中连续子串的最大和 ;

  与第 M 个数组成连续子串时 ,第 M 个数可以与第 M-1 个数组成的子串组合,也可以独立作为一个子串 , 与  M-1 个数组成的(N-1)组连续子串中最大和组合 ,才能达到分成 N 组的效果;

  最后输出dp数组中最大值,即为 N 组中数据之和的最大值;

 

  

下面给出相应的代码:

#include<iostream>
using namespace std ;
#define M 100005
#define max(x,y) ((x) > (y) ? (x) : (y))
int a[ M ] , dp[ M ][ M ] ;
int main()	{int k , n ;while(cin >> k >> n)	{int i ;for(i = 1 ; i <= n ; i++)cin >> a[i] ;memset(dp,0,sizeof(dp)) ;for(i = 1 ; i <= k ; i++)	{dp[i][i] = dp[i-1][i-1] + a[i] ;dp[i-1][i] = max(dp[i-1][i],dp[i-1][i-1]) ;for(int j = i + 1 ; j <= n ; j++)	{dp[i][j] = max(dp[i-1][j-1]+a[j],dp[i][j-1]+a[j]) ;dp[i-1][j] = max(dp[i-1][j],dp[i-1][j-1]) ;}}int max1 = -(1<<30) ;for(i = k ; i <= n ; i++)max1 = max(max1,dp[k][i]) ;cout << max1 << endl ;}return 0 ;
}

 

  

  上面的代码空间复杂度比较高,但通过观察可以得到,依照滚动数组的思想,让dp数组的行数为2,在两行中循环,这样轻易一改,省去了很多空间:

有木有很强大!!!      思维决定到效率!!!

 

#include<iostream>
using namespace std ;
#define M 100005
#define max(x,y) ((x) > (y) ? (x) : (y))
int a[ M ] , dp[ 2 ][ M ] ;
int main()	{int k , n ;while(cin >> k >> n)	{int i ;for(i = 1 ; i <= n ; i++)cin >> a[i] ;memset(dp,0,sizeof(dp)) ;int t = 0 ;for(i = 1 ; i <= k ; i++)	{t = !t ;dp[t][i] = dp[!t][i-1] + a[i] ;dp[!t][i] = max(dp[!t][i],dp[!t][i-1]) ;for(int j = i + 1 ; j <= n ; j++)	{dp[t][j] = max(dp[!t][j-1]+a[j],dp[t][j-1]+a[j]) ;dp[!t][j] = max(dp[!t][j],dp[!t][j-1]) ;}}int max1 = -(1<<30) ;for(i = k ; i <= n ; i++)max1 = max(max1,dp[k&1][i]) ;cout << max1 << endl ;}return 0 ;
}

 

 

 

转载于:https://www.cnblogs.com/NYNU-ACM/p/4237471.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机行业2019年度投资研究手册

来源&#xff1a;乐晴智库精选摘要&#xff1a;计算机服务于各行各业&#xff0c;担当各下游需求行业的重要工具&#xff0c;在技术上游电子元器件和通信的技术变迁中&#xff0c;计算机企业结合客户需求不断进行技术和模式创新以获取源源不断的成长动力。2014-2015年在4G及移动…

scikit-learn流形学习手写数字可视化

本文参考如下链接&#xff1a; https://www.jianshu.com/p/2542e0a5bdf8 from time import time import cv2 import numpy as np import matplotlib.pyplot as plt from matplotlib import offsetbox from sklearn import (manifold, datasets, decomposition, ensemble,disc…

《Cracking the Coding Interview》——第11章:排序和搜索——题目7

2014-03-21 22:05 题目&#xff1a;给你N个盒子堆成一座塔&#xff0c;要求下面盒子的长和宽都要严格大于上面的。问最多能堆多少个盒子&#xff1f; 解法1&#xff1a;O(n^2)的动态规划解决。其实是最长递增子序列问题&#xff0c;所以也可以用O(n * log(n))的优化算法。 代码…

世界上手速最快的仿人机器人诞生在韩国!魔术师也要失业了!

来源&#xff1a;机器人创新生态虽然夏天都过去了这么久&#xff0c;但谁能想到小编竟然还能深受蚊子的骚扰~~这只蚊子真的是很强啊&#xff0c;为了消灭这些蚊子&#xff0c;小编特意进口了一款专用的“拍蚊子机器人”经过小编亲自测试&#xff0c;这款机器人拍蚊子效果非常不…

分解质因数

----------------------------------------------------------- 题目&#xff1a;编程将一个正整数分解质因数。例如&#xff1a;输入90,打印出902*3*3*5。 -------------------------------------------------------------------- while (n%i 0){} 目的是为了使质因数 i 全部…

从人工智能到物联网……这些公司如何改变农业与食品工业

来源&#xff1a;资本实验室目前&#xff0c;全球农业与食品工业产值约7.8万亿美元&#xff0c;占全球15%以上的GDP&#xff0c;并且雇佣了超过40%的人口。然而&#xff0c;农业与食品产业正面临着一些新的问题亟待解决&#xff0c;其中包括&#xff1a;消费者偏好和需求存在多…

pandas分析各国家交易情况

数据集来源&#xff1a; https://archive.ics.uci.edu/ml/datasets/Online%20Retail #coding:utf-8import pandas as pd import os import seaborn as sns import matplotlib.pyplot as pltRAW_DATA_FILE ./data/online_retail.xlsx CLN_DATA_FILE ./output/cln_online_ret…

Gartner 2019基础设施和运维十大趋势:Serverless、边缘计算、SaaS 变复杂等

来源&#xff1a;机器之心Gartner公司强调了基础设施和运维(I&O)领导者在2019年必须开始准备迎接的几大技术和趋势&#xff0c;以便支持数字化基础设施。Gartner的分析师们在Gartner IT基础设施、运维和云战略大会上介绍了研究结果。Gartner的高级研究主任罗斯•温瑟(Ross …

天池入门赛--蒸汽预测

首先查看数据 #coding:utf-8 """ Created on Wen Jan 9 2019author: fzh """ import warnings warnings.filterwarnings("ignore") import matplotlib.pyplot as plt plt.rcParams.update({figure.max_open_warning: 0}) import sea…

脑科学与AI要想融合发展,目前来说仍很困难

来源&#xff1a;人机与认知实验室摘要&#xff1a;AI要想进一步发展&#xff0c;需要从脑科学得到启发。业界普遍认为&#xff0c;AI未来的演进方向就是计算智能、感知智能和认知智能&#xff0c;在此期间&#xff0c;真正需要突破的就是让计算机理解、思考和进行自我学习&…

javascript中setInterval,setTimeout的区别跟用法

setInterval() 方法可按照指定的周期&#xff08;以毫秒计&#xff09;来调用函数或计算表达式。setInterval() 方法会不停地调用函数&#xff0c;直到 clearInterval() 被调用或窗口被关闭。setTimeout只运行一次&#xff0c;也就是说设定的时间到后就触发运行指定代码&#x…

张首晟生前重磅演讲:要用第一性原理的思维方式来理解今天的世界

来源&#xff1a;经济学家圈摘要&#xff1a;本文为华裔科学家张首晟今年3月25日在IT领袖峰会上的演讲以下是张首晟教授演讲全文&#xff1a;谢谢大家的关注&#xff0c;在下午来听我的分享&#xff0c;今天大会是IT领袖峰会&#xff0c;所以我想讲的三个题目是「量子计算」、「…

Windows live writer插入代码图片Test

/*** 验证字符串text是不是ip地址&#xff0c;是返回true&#xff0c;否则返回false* param text* return*/ public static boolean isIPAddress(String text){StringBuilder regex new StringBuilder("^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."); regex.a…

knn用于水果数据集分类

数据集地址&#xff1a;https://download.csdn.net/download/fanzonghao/10940440 knn算法流程&#xff1a; 若k取无穷大&#xff0c;那么测试数据就取决于每一类的占比&#xff0c;归属于占比最大的那一类。 首先观察数据集&#xff0c;利用mass&#xff0c;height&#xff…

人脸识别技术大起底,你了解多少?

来源&#xff1a;与非网这两年&#xff0c;随着科技的迅速发展&#xff0c;人脸识别已经逐渐成为了新时期生物识别技术应用的重要领域&#xff0c;忘记密码了?没事儿&#xff0c;咱还可以“刷脸”!今天&#xff0c;小编将带大家了解一下最新的人脸识别技术&#xff0c;看看这项…

深度学习时出现的一些安装问题+ubuntu apt的一些问题+github release文件加速

一&#xff0e;python用于深度学习时出现的一些安装问题 问题&#xff1a;raise ImportError, str(msg) , please install the python-tk package 解决&#xff1a;apt-get update apt-get install python-tk 问题&#xff1a;pip install pycocotools出现错误 pip instal…

Struts+Tomcat搭建

StrutsTomcat搭建tomcat使用(服务器端开发): 如果要安装Tomcat需要进行的配置&#xff1a;tomcat安装在c: \Tomcat CATALINA_HOME变量值设为: H:\Program Files (x86)\tomcat\apache-tomcat-7.0.27 CATALINA_BASE变量值设为: H:\Program Files (x86)\tomcat\apache-tomcat-…

AlphaZero登上《科学》封面:一个算法“通杀”三大棋,完整论文首次发布

来源&#xff1a;量子位作者&#xff1a;乾明 一璞 栗子 晓查不仅会下围棋&#xff0c;还自学成才横扫国际象棋和日本将棋的DeepMind AlphaZero&#xff0c;登上了最新一期《科学》杂志封面。同时&#xff0c;这也是经过完整同行审议的AlphaZero论文&#xff0c;首次公开发表。…

自编码器及相关变种算法简介

本文对自编码器&#xff08;Auto-Encoder&#xff09;算法及其相关变种算法进行简要介绍&#xff0c;其中包括 Regularized Auto-Encoder、Sparse Auto-Encoder、Denoising Auto-Encoder 和 Contractive Auto-Encoder&#xff0c;重点讨论各算法的基本思想及优化时所需目标函数…

pytorch数据预处理

一&#xff0c;数据加载 数据路径&#xff1a; #coding:utf-8 import torch as t from torch.utils import data import os from PIL import Image import numpy as npclass DogCat(data.Dataset):def __init__(self, path):imgs os.listdir(path)# 所有图片的绝对路径# 这里…