求助 样例过了但WA了
  • 板块CF148E Porcelain
  • 楼主xrk2006
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/1/5 14:16
  • 上次更新2023/10/28 12:47:35
查看原帖
求助 样例过了但WA了
341245
xrk2006楼主2022/1/5 14:16

求助,代码调了一整天,样例过了,但是就是过不了……思路是分组背包。

//CF148E
//2022.1.5 9:32 13:33
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=105;
int v[maxn][maxn],sum[maxn][maxn];
int dp1[maxn][maxn],dp2[maxn][10005];//105
int num[maxn];

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

int main()
{
	int n,m;
	n=read();m=read();
	for(int i=1;i<=n;i++)
	{
		num[i]=read();
		for(int j=1;j<=num[i];j++)
		{
			v[i][j]=read();
			sum[i][j]+=sum[i][j-1]+v[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=num[i];j++)
		{
			for(int k=0;k<=j;k++)
			{
				int l=j-k;//i k l 
				int s=sum[i][num[i]]-sum[i][num[i]-l]+sum[i][k];
				//cout<<dp1[i][j]<<" ";
				dp1[i][j]=max(dp1[i][j],s);
				//cout<<dp1[i][j]<<endl;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		//cout<<i<<endl;
		for(int j=0;j<=m;j++)
		{
			//cout<<j<<endl;
			for(int k=0;k<=num[i]&&k<=j;k++)
			{
				dp2[i][j]=max(dp2[i][j],dp2[i-1][j-k]+dp1[i][k]);
				//cout<<dp2[i][j]<<endl;
			}
		}
	}
	cout<<dp2[n][m]<<endl;
	return 0;
}
2022/1/5 14:16
加载中...