zoukankan      html  css  js  c++  java
  • HDU 1003 Max Sum

    思路:

    1.用一个变量max_s记录最大的字串和,初始为-1001
    2.我们需要发现一个规律,和最大的子串的前n(0<n≤len)一定是正数,否则砍去这个前n项我们能得到一个和更大的子串,除非这个子串只由一个负数组成;
    3.使用一个变量ans记录当前子串的和,如果ans>max_s则更新max_s和最大串的左右端点;如果ans<0则抛弃当前子串,即更新ans0

    代码:

    #include<iostream>
    using namespace std;
    const int MAX_N=1e5+99;
    int arr[MAX_N];
    int main(){
    	int t,kase=0;
    	cin>>t;
    	while(t--){
    		cout<<"Case "<<(++kase)<<":
    ";
    		int n;
    		cin>>n;
    		for(int i=1;i<=n;i++) cin>>arr[i];
    		int bg=1,lf,rt,max_s=-1001,ans=0;
    		for(int i=1;i<=n;i++){
    			ans+=arr[i];
    			if(ans>max_s){
    				max_s=ans;
    				lf=bg;
    				rt=i;
    			}
    			if(ans<0){
    				ans=0;
    				bg=i+1;
    			}
    		}
    		cout<<max_s<<' '<<lf<<' '<<rt<<'
    ';
    		if(t) puts("");
    	}
    	return 0;
    }
    
  • 相关阅读:
    OC面向对象—继承
    OC面向对象—封装
    OC内存管理
    OC方法和文件编译
    OC语言基础知识
    节点操作-2
    留言 节点操作案例
    js 下拉菜单案例
    节点操作
    tab栏切换效果
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308859.html
Copyright © 2011-2022 走看看