[ベース] HDU-1024 DP

トピックリンク

タイトル説明

n個の数、n個のゾーンに分けの数メートルパラゾーニング見つけるメートルの最大セグメントは、すべての数字が指定されて行く必要はありません。

思考

しようとしているので、n個として指定された数Mの状態の確立その結果、セグメントの最大数をDP [I] [j]はフロント示しjは、指定の数I最大セグメント。
2つの状態遷移方程式がある:
[J-1] DP [I] + A [J] 第で表されるj個のパラグラフに組み込ま数)
DP [-I 1] [J-1] + A [J ](jはセクションに独立した第一LETの数を示す)
が状態を圧縮する必要があるので、比較的小さな空間の対象として
[J-1 F]があることを意味DP [-I 1] [J-1] 即ち前J-多数のI 1-最大セグメント

コード

//hdu-1024
#include<bits/stdc++.h>
using namespace std;

const int inf=0x3f3f3f3f;
const int N=1e6+10;
int a[N];
int dp[N];
int f[N];

void solve(int m, int n)
{
    for(int i=1; i<=n; i++) {
        scanf("%d",&a[i]);
        dp[i]=f[i]=0;
    }
    int mx;
    for(int i=1; i<=m; i++) {
        mx=-inf;
        for(int j=i; j<=n; j++) {
            dp[j]=max(dp[j-1],f[j-1])+a[j];
            f[j-1]=mx;		//每次更新f[j-1],为下一次i的增加使用做准备
            mx=max(mx,dp[j]);
        }
    }
    printf("%d\n",mx);
}

int main()
{
    //freopen("in.txt","r",stdin);
    int m,n;
    while(~scanf("%d %d",&m,&n)) {
        solve(m,n);
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/ZX-GO/p/12569049.html