HDU 1003:Max Sum
Max Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 174588 Accepted Submission(s): 40639
If there are more than one result, output the first one. Output a blank line between two cases.
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
Case 1:
14 1 4 Case 2:
7 1 6
题意:给定一个序列,求其子序列的最大和,还有最大和的子序列的起始位置和结束位置。
求和与end都没什么好说的。求start是亮点,一开始判断了很久,后来还是那个想法,对于序列或是字符串正着想想不出来就逆过来想,从左到右end容易求,那从右至左的话start就容易求了。
代码:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#pragma warning(disable:4996)
using namespace std; int value[100005];
int dp[100005]; int main()
{
//freopen("input.txt","r",stdin);
//freopen("out.txt","w",stdout); int Test,num,i,j,ans,start,end;
value[0]=0; cin>>Test;
for(j=1;j<=Test;j++)
{
ans = -1005;
memset(dp,0,sizeof(dp)); cin>>num;
for(i=1;i<=num;i++)
{
cin>>value[i];
dp[i]=max(dp[i-1]+value[i],value[i]);
if(dp[i]>ans)
{
ans=dp[i];
end=i;
}
}
ans=-1005;
memset(dp,0,sizeof(dp));
for(i=num;i>=1;i--)
{
dp[i]=max(dp[i+1]+value[i],value[i]);
if(dp[i]>=ans)
{
ans=dp[i];
start=i;
}
}
cout<<"Case "<<j<<":"<<endl;
cout<<ans<<" "<<start<<" "<<end<<endl; if(j!=Test)
cout<<endl;
} return 0;
}
后来看discuss里其他人的思路,觉得从end开始往回倒,对每一个值都加起来,什么时候等于求出来的最大和了,什么时候就是start了,觉得这样做也很好。
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 1003:Max Sum的更多相关文章
- HDU 1003:Max Sum(DP,连续子段和)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- HDU 1024:Max Sum Plus Plus(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Problem Description Now I think you ...
- HDU 1024:Max Sum Plus Plus(DP,最大m子段和)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1024:Max Sum Plus Plus 经典动态规划之最大M子段和
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 【HDU 1003】 Max Sum
题 题意 需要在o(n)时间内,求最大连续的子序列的和,及其起点和终点. 分析 一种方法是一边读,一边维护最小的前缀和 s[i] ,然后不断更新 ans = max(ans,s[j] - s[i]), ...
- HDU1244:Max Sum Plus Plus Plus
题目链接:Max Sum Plus Plus Plus 题意:在n个数中取m段数使得这m段数之和最大,段与段之间不能重叠 分析:见代码 //dp[i][j]表示前i个数取了j段的最大值 //状态转移: ...
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left ...
- ACM1003:Max Sum
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- HDU-1003:Max Sum(优化)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
随机推荐
- 「POJ1147」The Buses
传送门 POJ Vjudge 解题思路 可以首先预处理一下可能成为一条线路的所有方案,然后把这些可能的方案按照长度降序排序,即按照路线上的时间节点从多到少排序. 因为这样我们就可以先确定更多的时刻的状 ...
- 在github上保存vscode的配置(后续重新安装vscode时,可以十分方便地从github上下载安装这个保存的配置)
1 安装拓展 Settings Sync 在 VSCode 拓展中搜索 Settings Sync 并安装,安装完成后,重启 2 设置 Github Person Access Token 进入这个页 ...
- python2中新式类和经典类的多重继承调用顺序
class A: def foo(self): print('called A.foo()') class B(A): pass class C(A): def foo(self): print('c ...
- (转)C#的 GC工作原理基础
作为一位C++出身的C#程序员,我最初对垃圾收集(GC)抱有怀疑态度,怀疑它是否能够稳定高效的运作:而到了现在,我自己不得不说我已经逐渐习惯并依赖GC与我的程序“共同奔跑”了,对“delete”这个习 ...
- Jquery制作插件---内容切换
//需求:点击左右导航箭头,实现内容的切换 //代码如下 <!DOCTYPE html> <html lang="en"> <head> < ...
- 吴裕雄--天生自然JAVA数据库编程:PrepareStatement
import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import j ...
- NO16 第二关课后考试-aw-F-过滤已知的一级目录
·总结的经验:1.学会总结时学好运维的重要前提.2.通过案列或例子来总结一个技术点或者命令.3.画一张逻辑图,形象的卡通记忆这个知识技术点.4.通过管道过滤数据时,最好先输出结果,然后回退再使用管道看 ...
- Timetable CodeForces - 946D (预处理+背包)
题意:n天m节课,最多可以逃k节课,每天在学校待的时间为该天上的第一节课到最后一节课持续的时间.问怎样逃课可以使这n天在学校待的时间最短,输出最短的时间. 分析: 1.预处理出每天逃j节课时在学校待的 ...
- webpack 4 x使用详细
1.首先安装node.js 2.打开控制台cmd,输入npm install webpack webpack-cli webpack-dev-server -g 3.在本地磁盘上建一个文件夹,然后通过 ...
- nested exception is javax.management.InstanceAlreadyExistsException: webservice:name=statFilter,type=StatFilter
Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [ ...