题目来源:点击这里
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
typedef long long ll;
ll yinin[1000+5][1000+5];
ll a[105],n,m,tot,k,kk;
ll total=0;
ll dp[100*100+5],tip[1000+5],sum[1000+5];
ll sum2[1000+5];
using namespace std;
int main(){
scanf("%lld %lld",&n,&m);
memset(yinin,0,sizeof(yinin));
for(ll i=1;i<=n;++i){
memset(sum,0,sizeof(sum));
scanf("%d",&tip[i]);
for(ll j=1;j<=tip[i];++j){
scanf("%d",&a[j]);
sum[j]=sum[j-1]+a[j];
}
memset(sum2,0,sizeof(sum2));
for(ll j=1;j<=tip[i];++j){
sum2[j]=sum2[j-1]+a[tip[i]-j+1];
}
for(ll j=0;j<=tip[i];++j){
for(ll k=0;k+j<=tip[i];++k){
yinin[i][j+k]=max(sum[j]+sum2[k],yinin[i][j+k]);
}
}
}
memset(dp,0,sizeof(dp));
for(ll i = 1; i <= n; ++i)
for(ll j = m; j >= 1; --j){
for(ll k = 1; k <= j&&k<=tip[i]; ++k)
dp[j] = max(dp[j], dp[j - k] + yinin[i][k]);
}
printf("%lld",dp[m]);
return 0;
}