zoukankan      html  css  js  c++  java
  • hdu4561 bjfu1270 最大子段积

    就是最大子段和的变体。最大子段和只要一个数组,记录前i个里的最大子段和在f[i]里就行了,但是最大子段积因为有负乘负得正这一点,所以还需要把前i个里的最小子段积存起来。就可以了。直接上代码:

    /*
     * Author    : ben
     */
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <set>
    #include <map>
    #include <stack>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <functional>
    #include <numeric>
    #include <cctype>
    using namespace std;
    //输入非负整数,用法int a = get_int();
    int get_int() {
        int res = 0, ch;
        while (!((ch = getchar()) >= '0' && ch <= '9')) {
            if (ch == EOF)
                return -1;
        }
        res = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9')
            res = res * 10 + (ch - '0');
        return res;
    }
    //输入整数(包括负整数,故不能通过返回值判断是否输入到EOF,本函数当输入到EOF时,返回-1),用法int a = get_int2();
    int get_int2() {
        int res = 0, ch, flag = 0;
        while (!((ch = getchar()) >= '0' && ch <= '9')) {
            if (ch == '-')
                flag = 1;
            if (ch == EOF)
                return -1;
        }
        res = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9')
            res = res * 10 + (ch - '0');
        if (flag == 1)
            res = -res;
        return res;
    }
    
    const int MAXN = 10009;
    int maxr[MAXN], minr[MAXN];
    
    inline int mymul(int a, int b) {
        int sign = 1;
        if (a * b == 0) {
            return 0;
        }
        if (a * b < 0) {
            sign = -1;
        }
        return sign * (abs(a) + abs(b));
    }
    
    int main() {
        int T = get_int(), tmp, N;
        int a[3];
        for (int t = 1; t <= T; t++) {
            N = get_int();
            maxr[0] = minr[0] = 0;
            int ans = 0;
            for (int i = 1; i <= N; i++) {
                tmp = get_int2() / 2;
                a[0] = mymul(maxr[i - 1], tmp);
                a[1] = mymul(minr[i - 1], tmp);
                a[2] = tmp;
                sort(a, a + 3);
                maxr[i] = a[2];
                ans = maxr[i] > ans ? maxr[i] : ans;
                minr[i] = a[0];
            }
            printf("Case #%d: %d
    ", t, ans);
        }
        return 0;
    }
  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/moonbay/p/4263040.html
Copyright © 2011-2022 走看看