bjfu1253 最大上升子序列和

n^2的算法就行,很简单的动态规划。直接上代码

/*
 * 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;
/*
 * 输入非负整数
 * 支持short、int、long、long long等类型(修改typec即可)。
 * 用法typec a = get_int();返回-1表示输入结束
 */
typedef int typec;
typec get_int() {
    typec 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;
}
/**
 * 输入一个字符串到str中,与scanf("%s", str)类似,
 * 会忽略掉缓冲区中的空白字符。返回值为输入字符串
 * 的长度,返回-1表示输入结束。
 */
int get_str(char *str) {
    char c;
    while ((c = getchar()) <= ' ') {
        if(c == EOF) {
            return -1;
        }
    }
    int I = 0;
    while (c > ' ') {
        str[I++] = c; c = getchar();
    }
    str[I] = 0;
    return I;
}

const int MAXN = 1010;
int data[MAXN], f[MAXN];
int N;

int main() {
    while ((N = get_int()) > 0) {
        for (int i = 0; i < N; i++) {
            data[i] = get_int2();
        }
        f[0] = data[0];
        for (int i = 1; i < N; i++) {
            int ma = 0;
            for (int j = i - 1; j >= 0; j--) {
                if (data[j] < data[i] && f[j] > ma) {
                    ma = f[j];
                }
            }
            f[i] = ma + data[i];
        }
        printf("%d\n", *max_element(f, f + N));
    }
    return 0;
}

 

posted @ 2015-02-07 22:38  moonbay  阅读(140)  评论(0编辑  收藏  举报