40分 中间三个点 从1开始存arr是因为后面从n+1开始遍历的
查看原帖
40分 中间三个点 从1开始存arr是因为后面从n+1开始遍历的
1187975
ccdssfj楼主2024/9/1 22:26
#include<bits/stdc++.h>
using namespace std;

const int M=200+10,N=2e4+10;

int arr[N],tool[M],f[N];

int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>tool[i];
	}
	for(int i=1;i<=n;i++){
		cin>>arr[i];
	}
	for(int i=1;i<N;i++){
		f[i]=-1*0x3f3f3f3f;
	}
	f[0]=0;
	for(int i=1;i<=n*3;i++){
		for(int j=1;j<=m;j++){
			f[i]=max(f[i],f[max(0,i-tool[j])]+arr[max(0,i-tool[j])]);
		}
	}
	/*
	for(int i=0;i<=2*n;i++){
		cout<<f[i]<<' ';
	}
	*/
	int maxa=-0x3f3f3f3f;
	for(int i=n+1;i<=3*n;i++){
		maxa=max(maxa,f[i]);
	}
	cout<<maxa;
	
	return 0;
}
2024/9/1 22:26
加载中...