90Pts求助,第六个点WA
查看原帖
90Pts求助,第六个点WA
317752
竹取颱楼主2021/10/31 20:45

RT

#include<bits/stdc++.h>
using namespace std;
long long n,m,t,N,V,v[10010],w[10010],s;
long long _v[10010],_w[10010],tot,f[10010];
template<typename T>
inline void read(T &x)
{
	x=0;
	register int f=1;
	register char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<3)+(x<<1)+(c^48);
		c=getchar();
	}
	x*=f;
}
template<typename T>
void write(T x)
{
	if(x<0)
	{
		x=~x+1;
		putchar('-');
	}
	if(x>=10) write(x/10);
	putchar(x%10^48);
}
int main()
{
	read(n);read(m);read(t);read(V);
	V=min(t,V-1);N=n*m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			v[i*m-m+j]=2*(i+j);
			read(w[i*m-m+j]);
		}
	for(int i=1;i<=N;++i)
	{
		read(s);
		for(int j=1;j<=s;j<<=1)
		{
			++tot;
			_v[tot]=j*v[i];
			_w[tot]=j*w[i];
			s-=j;
		}
		if(s>0)
		{
			++tot;
			_v[tot]=s*v[i];
			_w[tot]=s*w[i];
		}
	}
	for(int i=1;i<=tot;++i)
		for(int j=V;j>=_v[i];--j)
			f[j]=max(f[j],f[j-_v[i]]+_w[i]);
	write(f[V]);
	return 0;
}
2021/10/31 20:45
加载中...