数组长度为啥影响运行时间?
  • 板块灌水区
  • 楼主C1R1A1E1F1
  • 当前回复16
  • 已保存回复16
  • 发布时间2020/9/22 20:16
  • 上次更新2023/11/5 12:46:45
查看原帖
数组长度为啥影响运行时间?
331897
C1R1A1E1F1楼主2020/9/22 20:16

RT(因为太偏就没发在学术版) 在学校OJ做题,发现一个十分奇怪的问题:

#include <bits/stdc++.h>
using namespace std;
int n,m,t,a[200],z[200],f[200][200],s[200][200005],g[200][200];
int main()
{
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++)
		cin>>a[i]>>z[i];
	for(int i=1;i<=n;i++)
	{
		memset(s,0,sizeof(s));
		int v=(n-i+1)*t;
		for(int j=i;j<=n;j++)
		{
			for(int w=a[j];w<=v;w++)
				s[j][w]=max(s[j-1][w],s[j-1][w-a[j]]+z[j]);
			int vv=(j-i+1)*t;
			g[i][j]=s[j][vv];
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int x=0;x<i;x++)
				f[i][j]=max(f[i][j],f[x][j-1]+g[x+1][i]);
	cout<<f[n][m];
}//TLE
#include <bits/stdc++.h>
using namespace std;
int n,m,t,a[200],z[200],f[200][200],s[200][20000],g[200][200];
int main()
{
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++)
		cin>>a[i]>>z[i];
	for(int i=0;i<=n;i++)
	{
		memset(s,0,sizeof(s));
		int v=(n-i+1)*t;
		for(int j=i;j<=n;j++)
		{
			for(int w=a[j];w<=v;w++)
				s[j][w]=max(s[j-1][w],s[j-1][w-a[j]]+z[j]);
			int vv=(j-i+1)*t;
			g[i][j]=s[j][vv];
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int x=0;x<i;x++)
				f[i][j]=max(f[i][j],f[x][j-1]+g[x+1][i]);
	cout<<f[n][m];
}//WA(但是没TLE)

后来本蒟蒻觉得不服,又交了一次,这次只把

s[200][200005]

改成了

s[200][20005]

然后就不TLE了,求解为什么

2020/9/22 20:16
加载中...