Gourmet choice 1131D

发布时间 2023-03-28 11:00:26作者: towboat

有 n 组序列,第 i 组有 ki个元素,每次可以随机选一组拿掉其目前最左边或最右边的元素,

问 取了m 次后,的最大价值和。

 

 

#include <iostream>
#include <cstring>
#include <vector>
using namespace std ;
 const int M= 1e4+2;
 int n,m,f[102][M],a[102][M],v[102][M];
 int sum[102][M],L[102];
 
 void solve(){
 	int i,j,k;
 	for(i=1;i<=n;i++)
 	 for(j=m;j>=0;j--)
 	  for(k=0;k<=L[i];k++)
 	   if(k<=j)
 	   f[i][j] =max(f[i][j], f[i-1][j-k]+v[i][k]);
	cout<<f[n][m]<<'\n';
 }
 signed main(){
 	int  i,j;
 	cin>>n>>m;
 	for(i=1;i<=n;i++){
 		cin>>L[i];
 		 for(j=1;j<=L[i];j++) 
 		 	cin>>a[i][j],sum[i][j]=sum[i][j-1]+a[i][j];
 		
 		for(j=1;j<=L[i];j++)
 		 for(int y=0;y<=j;y++)
 		v[i][j]=max(v[i][j],
 		sum[i][y]+sum[i][L[i]]-sum[i][L[i]-j+y]);
 	}
 	 solve();
 }