SSブログ

[JOI合宿]2010-Day1:Stairs [JOI関連]

尺取り法+DPの問題でした.
O(N)の解法です~.

眠いので詳しい解法は後日... (最近こればっかり言っていて辛い...)
#include <stdio.h>

int main(void)
{
    int i, j;
    static int dp[500001], height[500001];
    int N, P;
    int tail;
    int temp;
    int sum, step;
    
    scanf("%d%d", &N, &P);
    
    step = tail = 0;
    sum = 0;
    dp[0] = 1;
    
    for (i = 0; i < N; i++){
        scanf("%d", &height[i]);
        
        if (i != 0){
            while (step > P){
                step -= height[tail];
                sum = (sum - dp[tail++] + 1234567) % 1234567;
            }
            dp[i] = sum % 1234567;
        }
        
        step += height[i];
        
        sum = (sum + dp[i]) % 1234567;
    }
    while (step > P){
        step -= height[tail];
        sum = (sum - dp[tail++] + 1234567) % 1234567;
    }
    
    printf("%d\n", sum);
    
    return (0);
}

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

[未]AOJ 0553: Dungeon合成写像と恒等写像 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。