takapt0226's diary

競技プログラミングのことを書きます

POJ 3661 Running

状態が(経過時間, exaustion)のdp

int main()
{
    int n, m;
    int d[ten(4)];
    scanf("%d%d", &n, &m);
    rep(i, n)
	scanf("%d", d + i);

    static int dp[ten(4) + 1000][512];
    rep(i, n)
    {
	erep(j, m)
	{
	    // run
	    chmax(dp[i + 1][j + 1], dp[i][j] + d[i]);

	    // rest
	    if (j > 0)
		chmax(dp[i + j][0], dp[i][j]);
	}
	// rest (can choose rest when exaustion == 0
	chmax(dp[i + 1][0], dp[i][0]);
    }
    printf("%d\n", dp[n][0]);
}