求助,分组背包板子WA #6
查看原帖
求助,分组背包板子WA #6
179253
无尽星空楼主2020/11/29 19:22
#include<bits/stdc++.h>
#define R register int
using namespace std;
const int N=105;
inline int read()
{
	int s=0;char c=getchar();
	while(!isdigit(c))  c=getchar();
	while(isdigit(c))  s=(s<<3)+(s<<1)+(c^48),c=getchar();
	return s;
}
int cas[N][N],ed[N],co[N][N],va[N][N],sum[N],dp[20005],s,n,m;
int main()
{
	s=read();n=read();m=read();
	for(R i=1;i<=s;i++)
		for(R j=1;j<=n;j++)  cas[j][i]=read();
	for(R i=1;i<=n;i++)
	{
		sort(cas[i]+1,cas[i]+1+s);
		for(R j=1;j<=s&&(cas[i][j]<<1|1)<=m;j++)
			if(cas[i][j]!=cas[i][j+1])  co[i][++ed[i]]=cas[i][j]<<1|1,va[i][ed[i]]=i*j;
		sum[i]=sum[i-1]+co[i][ed[i]];
	}
	for(R k=1;k<=n;k++)
		for(R j=sum[k]<m?sum[k]:m;j>=co[k][1];j--)
			for(R i=1;i<=ed[k]&&j-co[k][i]>=0;i++)
				if(dp[j]<dp[j-co[k][i]]+va[k][i])  dp[j]=dp[j-co[k][i]]+va[k][i];
	for(R i=1;i<=m;i++)  dp[m]=max(dp[m],dp[i]);
	printf("%d",dp[m]);return 0;
}
2020/11/29 19:22
加载中...