acm之动态规划题目1
2016-06-23 10:27
302 查看
Problem Description
Given a sequence a[1],a[2],a[3]……a, your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.
Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).Output
For each test case, you should output two lines. The first line is “Case #:”, # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.Sample Input
25 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
Sample Output
Case 1:14 1 4
Case 2:
7 1 6
代码:
#include<stdio.h> #include<iostream> using namespace std; int max(int a,int b){ return a>b?a:b; } int main(){ int a,b,t=0; int c[100000]; int f[100000]; int p[100000]; cin>>a; while(a--){ t++; cin>>b; for(int i=0;i<b;i++){ cin>>c[i]; p[i]=i; } f[0]=c[0]; for(int i=1;i<b;i++){ f[i]=max(c[i],f[i-1]+c[i]); if(f[i]==c[i])p[i]=i; if(f[i]==c[i]+f[i-1])p[i]=p[i-1]; } int Max=f[0]; int s=p[0]; int e=0; for(int i=1;i<b;i++){ if(Max<f[i]){ Max=f[i]; s=p[i]; e=i; } } cout<<"Case "<<t<<":"<<endl<<Max<<" "<<s+1<<" "<<e+1<<endl; if(a)cout<<endl; } return 0; }
相关文章推荐
- 黑马程序员:Android N并非7.0而是6.X?
- Atom 编辑器插件配置
- Entity Framework 第九篇 关于自增列的事务处理
- 程序员修炼之道——从小工到专家阅读笔记01
- 移除服务器缓存实例
- 228. Summary Ranges
- 混淆报错问题proguard returned with error code 1.See console
- linux上samba服务的配置使用
- 黑马程序员:Android N与iOS 10的明争暗斗
- Lua函数
- 站在程序员的角度学算法 主讲人:雷文昌 QQ:494391740
- Window_Open详解
- Java控制台小游戏------猜拳游戏
- oracel 建同义词
- Session共享实现方案调研
- java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
- os x 10.10 抹盘安装
- MyEclipse Debug模式下无法显示debug信息
- 有效数独 Valid Sudoku
- 侧滑(Slidingmenu)