码迷,mamicode.com
首页 > 其他好文 > 详细

2803_sum_dp

时间:2017-10-29 21:15:59      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:思路   ++   printf   情况   int   blog   bsp   div   mem   

题目描述

N个数排成一个环,请选出不超过K段的连续的数,段与段间不能重叠,且使得选出的数和最大。


 

思路

应为是一个环,所以选的段数等于不选的段数,对于头尾相连的情况就可以用求一次最大值和一次最小值得出解

dp设f[i][j][0/1]表示前i个数分了j段,当前这个点选或不选


#include <stdio.h>
#include <string>
#include <cstring>
using namespace std;
#define N 1001000
#define fill(x, y) memset(x, y, sizeof(x))
#define INF 0x7f7f7f7f
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))
int f[N][12][2];
int a[N];
inline int read()
{
    int x = 0, p = 1; char ch = getchar();
    while (ch < 0 || ch > 9) {if (ch == -) p = -1; ch = getchar();}
    while (ch >= 0 && ch <= 9) {x = (x << 1) + (x << 3) + ch - 0; ch = getchar();}
    return x * p;
}
int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    int tot = 0;
    for (int i = 1; i <= n; i++)
    {
        a[i] = read();
        tot += a[i];
    }
    fill(f, -0x7f);
    f[1][1][1] = a[1];
    f[1][0][0] = 0;
    int ans = -INF;
    for (int i = 2; i <= n; i++)
        for (int j = 0; j <= k; j++)
        {
            f[i][j][0] = max(f[i - 1][j][1], f[i - 1][j][0]);
            f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j - 1][0]) + a[i];
            ans = max(ans, f[i][j][1]);
            ans = max(ans, f[i][j][0]);
        }
    int t = ans;
    fill(f, 0x7f);
    ans = INF;
    f[1][1][1] = a[1];
    f[1][0][0] = 0;
    for (int i = 2; i <= n; i++)
        for (int j = 0; j <= k; j++)
        {
             f[i][j][0] = min(f[i - 1][j][1], f[i - 1][j][0]);
            f[i][j][1] = min(f[i - 1][j][1], f[i - 1][j - 1][0]) + a[i];
            ans = min(ans, f[i][j][1]);
            ans = min(ans, f[i][j][0]);    
        }
    printf("%d\n", max(t, tot - ans));
    return 0;
}

 

2803_sum_dp

标签:思路   ++   printf   情况   int   blog   bsp   div   mem   

原文地址:http://www.cnblogs.com/nidhogg/p/7751204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!