求助玄学MLE
  • 板块灌水区
  • 楼主CuSO4_and_5H2O
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/8/9 15:12
  • 上次更新2023/10/27 16:17:36
查看原帖
求助玄学MLE
231946
CuSO4_and_5H2O楼主2022/8/9 15:12

RT,这两份代码我觉得在空间上没有任何不同,但是测评结果却不相同

下边这个代码的的结果

#include<bits/stdc++.h>
#define int long long
#define max(A,B) (A<B?B:A)
#define min(A,B) (A>B?B:A)
#define qwq f[i][ab][ac]%=998244353;
using namespace std;
const int N=1e6;

int f[101][1001][1001];
int n,sum,a;

signed main(){
	cin>>n;
	f[0][0][0]=1;
	for(int i=1;i<=n;++i)
	{
		cin>>a;sum+=a;
		for(int ab=0;ab<=1000;++ab)
		{
			for(int ac=0;ac<=1000;++ac)
			{
				if(ab >= a&&ac >= a)	f[i][ab][ac]+=f[i-1][ab-a][ac-a];qwq
				if(ab>=a)	f[i][ab][ac]+=f[i-1][ab-a][ac];qwq
				if(ac>=a)	f[i][ab][ac]+=f[i-1][ab][ac-a];qwq
				f[i][ab][ac]+=f[i-1][ab][ac];qwq
			}
		}
	}
	
	int ans=0;
	int k1,k2,k3,k4;
	cin>>k1>>k2>>k3>>k4;
	for(int ab=0;ab<=1000;++ab)
	{
		for(int ac=0;ac<=1000;++ac)
		{
			int cd=sum-ab,bd=sum-ac;
			if(ab<=k1 && cd<=k2 && ac<=k3 && bd<=k4)
				ans+=f[n][ab][ac];ans%=998244353;
		}
	}
	cout<<ans;
}

下面这个代码的结果

#include<iostream>
#include<cstdio>
#define rint register int
typedef long long ll;
#define rll register ll
using namespace std;
inline ll read()
{
	rll x=0;
	bool fg=false;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		fg|=(ch=='-');
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return fg?~x+1:x;
}
const int mod=998244353;
int n;
int k1,k2,k3,k4,sum;
int w[105];
int dp[105][1005][1005];
void MOD(int &x) {
	if(x>=mod) x-=mod;
}
int main()
{
	n=read();
	for(rint i=1;i<=n;++i)
	{
		w[i]=read();
		sum+=w[i];
	}
	k1=read(),k2=read(),k3=read(),k4=read();
	dp[0][0][0]=1;
	for(rint i=1;i<=n;++i)
	{
		for(rint ab=0;ab<=1000;++ab)
		{
			for(rint ac=0;ac<=1000;++ac)
			{
				if(ab >= w[i]&&ac >= w[i])	MOD(dp[i][ab][ac]+=dp[i-1][ab-w[i]][ac-w[i]]);
				if(ab>=w[i])	MOD(dp[i][ab][ac]+=dp[i-1][ab-w[i]][ac]);
				if(ac>=w[i])	MOD(dp[i][ab][ac]+=dp[i-1][ab][ac-w[i]]);
				MOD(dp[i][ab][ac]+=dp[i-1][ab][ac]);
			}
		}
	}
	int ans=0;
	for(rint ab=0;ab<=1000;++ab)
	{
		for(rint ac=0;ac<=1000;++ac)
		{
			int cd=sum-ab,bd=sum-ac;
			if(ab<=k1 && cd<=k2 && ac<=k3 && bd<=k4)
				MOD(ans+=dp[n][ab][ac]);
		}
	}
	printf("%d\n",ans);
	return 0;
}

所以MLE是因为什么MLE

2022/8/9 15:12
加载中...