题目描述
预处理每个队列用j个数的最大值,这个暴力枚举即可确定了左边用几个数右边就确定了,然后就是一个01背包问题了
样例
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,M=N*2,mod=1e9+7;
#define int long long
#define uLL unsigned long long
const long long inf=1e18;
const long long INF=1e18;
typedef pair<int,int> PII;
typedef long long LL;
using node=tuple<int,int,int>;
int n,m,k;
int S,T;
int a[N],s[N];
void solve()
{
cin>>n>>m;
vector<int> f(m+10,-inf);
f[0]=0;
for(int i=1;i<=n;i++){
int tot;cin>>tot;
auto g=f;
for(int j=1;j<=tot;j++){
cin>>a[j];
s[j]=s[j-1]+a[j];
}
vector<int> mx(tot+10);
for(int j=1;j<=tot;j++)
{
for(int l=0;l<=j;l++)
{
mx[j]=max(mx[j],s[l]+(s[tot]-s[tot-(j-l)]));
}
}
for(int j=1;j<=tot;j++){
for(int k=j;k<=m;k++)
{
g[k]=max(g[k],f[k-j]+mx[j]);
}
}
swap(g,f);
}
cout<<f[m];
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
//cin>>t;
while(t--) solve();
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla