#P2142. 抢金块.从后往前看.填空题

抢金块.从后往前看.填空题

题目描述

地面上有一些格子,每个格子上面都有金块,但不同格子上的金块有不同的价值,你一次可以跳 SSTT 步。

例如 S=2S=2T=4T=4,你就可以跳 22 步、3 步或 44 步。

你从第一个格子起跳,必须跳到最后一个格子上,请你输出最多可以获得的金块的总价值。

输入格式

11 行是格子个数 nn (n<=1000n <= 1000);

22 行是 SSTT,保证 TT 大于 SS (2S<T102 \le S \lt T \le 10);

33 行是每个格子上的金块价值 PiP_i (1Pi100001 \le P_i \le 10000)。

输出格式

输出最多可以获得的金块的总价值。如果不能走到第 nn 个格子,输出 0.

样例

10
2 3
4 5 8 2 8 3 6 7 2 9
36

样例解释

跳 1、3、5、8、10 这些位置 ,总价值:4+8+8+7+9=36。

完成程序

#include<bits/stdc++.h>
using namespace std;
int n,dp[1001],x[1001],s,t,ans;
int main()
{
	scanf("%d",&n);
	scanf("%d%d",&s,&t);
	for(int i=1;i<=n;i++)
		scanf("%d",&x[i]);
	
	dp[1] = x[1];
	for(int i=__填空(1)__;i<n;i++){
		if(__填空(2)__) continue; // 能跳到 i 这个格子是前提,否则就不需要从第 i 个格子往后看了
		for(int j=__填空(3)__;__填空(4)__;j++)
			if(i+j<=n)
				dp[i+j] = max(dp[i+j],__填空(5)__);				
	}
	
	printf("%d",__填空(6)__;);
	
    return 0;
}

填空(1): {{ input(1) }}

填空(2): {{ input(2) }}

填空(3): {{ input(3) }}

填空(4): {{ input(4) }}

填空(5): {{ input(5) }}

填空(6): {{ input(6) }}