九度:1011

来源:互联网 发布:双色球高级缩水软件 编辑:程序博客网 时间:2024/05/21 22:29

浙大2005年机试


动态规划:最大程度子串


//DP#include <stdio.h>#include <string.h>#include <iostream>#include <vector>#include <queue>#include <stack> using namespace std; struct Node{    int max;    int s;//start    int e;//end};int main(){     #ifdef ONLINE_JUDGE#else    freopen("E:\\in.txt", "r", stdin);#endif     int k;    while(scanf("%d", &k) && k!=0){        vector <int> a;        bool flag = true;        for(int i=0;i<k;i++){            int t;            scanf("%d", &t);            if(t >= 0)                flag = false;            a.push_back(t);        }// read         if(flag == true){            printf("0 %d %d\n", a[0], a[k-1]);            continue;        }// all is zero          struct Node ans;        ans.max=a[0];        ans.s=a[0];        ans.e=a[0];         struct Node icu;        icu.max=a[0];        icu.s=a[0];        icu.e=a[0];         for(int j=1; j<k; j++){            if(icu.max < 0){                icu.max =a[j], icu.s=a[j], icu.e=a[j];continue;            }// too litle             icu.max += a[j];            icu.e=a[j];             if(icu.max > ans.max){                ans.max=icu.max;                ans.s=icu.s;                ans.e=icu.e;            }// new max sub string         }         printf("%d %d %d\n", ans.max, ans.s, ans.e);     }//while       return 0;}



0 0