求助各位大神帮帮忙70分
  • 板块学术版
  • 楼主never_check
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/5 20:19
  • 上次更新2023/11/5 22:05:46
查看原帖
求助各位大神帮帮忙70分
539861
never_check楼主2023/11/5 20:19

问题描述   有一条长为 的走廊,小明站在走廊的一端,每次可以跳过不超过 格,每格都有一个权值 。   小明要从一端跳到另一端,(从 号位置跳到 号位置)不能回跳,最多不超过 次,请问他跳过的方格的权值和最大是多少? 输入格式   输入的第一行包含两个整数 , , ,表示走廊的长度,小明每次跳跃的最长距离和小明可以跳的次数。   接下来 个整数,表示走廊每个位置的权值。 输出格式   输出一个整数。表示小明跳过的方格的权值和的最大值。 样例输入
8 5 3 3 4 -1 -100 1 8 7 6 样例输出
12 70分求助 n<=p<=t<=1000-1000<=w[i]<=1000

#include<bits/stdc++.h>
using namespace std;
long long F[1010][1010], oo = 1000000000,w[1010];
int main(){
	long long n,p,l=-10100,t;
	cin>>n>>p>>t;
	for(int i=1;i<=n;i++){
		cin>>w[i];
	}
	F[0][0] = 0;
	for (int i = 1; i <= n+1; ++i) F[0][i] = - oo;
	for (int c = 1; c <= t; ++c){
	    F[c][0] = -oo; 
	   	for (int i = 1; i <= n+1; ++i) {
	    	int LeiZhu = F[c-1][i-1] + w[i];
	      	for(int j = i - p; j < i; ++j) {
	       	if(j < 0) continue;
	         	if (F[c-1][j]+w[i] > LeiZhu) LeiZhu = F[c-1][j] + w[i];
	        }
	        F[c][i] = LeiZhu;
	        
	  	  }
	}
	for(int i=1;i<=t;i++){
		l=max(F[i][n+1],l);
		if(l<F[i][n+1]){
			l=F[i][n+1];
		}
	}
	cout<<l;
	

    return 0;
}

2023/11/5 20:19
加载中...