[USACO08JAN]実行中S - DP

必要な\(N- \)で朝ランの分、\(I \)数分以内には、実行(D_I \)\メートル、増加疲労\(1 \) いつでも疲労を超えることはできません(\メートル\)、1分間の疲労が軽減されます休む\(1 \) 疲労を休ませる休憩を取ることが必要です)\(\ 0に、疲労回復\(0 \)減少に続行されません。疲労の初期状態\(0 \) 疲労の終わりに復元する必要があります(0 \)\遠くに実行するように求めています。\(N \ 10 ^ 4当量 、D_I \当量1000、M \当量500 \)

解決

セット\(F [I] [J ] \) 考慮前表し\(I \)疲労の終了時に、分\(J \) 得ることができる最大距離、第2の決定は、実行時や転送開始されます休むことができます

読み誤るの問題は、彼の人生を台無しにしました

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

const int N = 20005;
int n,m,d[N],f[N][505];

void sh(int &x,int y) {
    x=max(x,y);
}

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>d[i];
    for(int i=1;i<=n;i++) {
        for(int j=0;j<=m;j++) {
            sh(f[i][j+1],f[i-1][j]+d[i]);
            if(j==0) sh(f[i][j],f[i-1][j]);
            sh(f[i+j-1][0],f[i-1][j]);
        }
    }
    cout<<f[n][0];
}

おすすめ

転載: www.cnblogs.com/mollnn/p/12443757.html