【子串和 44 动态规划】
来源:互联网 发布:矩阵逆matlab 编辑:程序博客网 时间:2024/06/02 23:06
子串和
时间限制:5000 ms | 内存限制:65535 KB
难度:3
- 描述
- 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n。
- 输入
- 第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000) - 输出
- 对于每组测试数据输出和最大的连续子串的和。
- 样例输入
151 2 -1 3 -2
- 样例输出
5
- 提示
- 输入数据很多,推荐使用scanf进行输入
第一次AC超时:
#include<iostream>#include<cstdio>using namespace std;#define N -100000int arr[1000000];int main(){ int n; scanf("%d",&n); while(n--){ int m; int max=N; scanf("%d",&m); for(int i=0;i<m;i++) scanf("%d",&arr[i]); for(int i=0;i<m;i++){ int ans=0; for(int j=i;j<m;j++){ ans+=arr[j]; if(ans>max){ max=ans; } } } printf("%d\n",max); }}
第二次:关键:if(sum<0) sum=0;
#include<cstdio>#include<iostream>using namespace std;int main(){ int t,k,n,i,max,sum; scanf("%d",&t); while(t--){ sum=0; max=-1000000; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&k); sum+=k; if(sum>max) max=sum; if(sum<0) sum=0; } printf("%d\n",max); }}
第三次:动态规划。#include<iostream>#include<cstdio>using namespace std;#define max(a,b) a>b?a:bint a[1000005],dp[1000005];int MAX(int n){ dp[1]=a[1]; int Max=dp[1]; for(int i=2;i<=n;i++){ dp[i]=max(dp[i-1]+a[i],a[i]); Max=max(dp[i],Max); } return Max;}int main(){ int T; cin>>T; while(T--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cout<<MAX(n)<<endl; }}
总结:求最大一个子序列,当前边的序列加上下一个元素,如果没有下一个元素大,则把最大的和等于下一个元素。
如果前边的序列和小于0,则应该把和归0.然后继续判断剩余的子序列。
可以总结为动态规划。
- 【子串和 44 动态规划】
- 动态规划 - 子串和
- 子串和-动态规划
- NYoj 44 子串和[经典动态规划2]
- NYOJ--44(动态规划)-题目----------------------------- 子串和
- nyoj--44--子串和(动态规划)
- nyoj 子串和 44 (简单动态规划)
- 子串和(动态规划)
- 动态规划:最大子串和
- 最大子串和 动态规划
- 子串和(动态规划)
- 动态规划之最长子序列和最长子串
- 动态规划--最长公共子序列和公共子串
- Noip2015 子串 【动态规划】
- NOIP2015 子串 【动态规划】
- NYOJ - 44 - 子串和(动态规划求法和贪心求法)
- 动态规划解决最大子串和的源代码
- HDU 1003 动态规划 求最大子串和
- WPF中,一个只能输入Int类型数字的TextBox控件的类
- CUDA: Windows 7 64位环境安装及配置
- 几种任务调度的 Java 实现方法与比较
- Java反编译器 Java Decompiler
- Wamp集成环境 PHPStorm+Xdebug调试代码
- 【子串和 44 动态规划】
- linux 爬虫总结 读取poj data
- 安装两个数据库
- poj 3167 Cow Bowling【dp】
- GetTextMetrics与GetTextExtent的区别
- android ,Tabhost,tab 动态刷新,onResume
- 2014----微软校招
- 【捡肥皂】,sql挂起清除工具 MS SQL2000挂起工具,无毒绿色,MSSQL手动清除挂起方法
- 解决"Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)