为何把数组开大了就AC了
查看原帖
为何把数组开大了就AC了
737575
liangjindong0504楼主2023/7/18 10:02

同一份代码,数组大小不同,一份50,一份100,不明白qwq

AC的

#include<bits/stdc++.h>
using namespace std;
long long n,h,d,a[5010][5010],dp[5010][5010],ma[5010];
long long b,c,maxn;
int main(){
	scanf("%d%d%d",&n,&h,&d);
	for(int i=1;i<=n;i++){
		scanf("%d",&b);
		for(int j=1;j<=b;j++){
			scanf("%d",&c);
			a[c][i]++;
		}
	}
	for(int i=h;i>=0;i--){
		for(int j=1;j<=n;j++){
			dp[i][j]=max(dp[i+1][j],ma[i+d])+a[i][j];
			ma[i]=max(ma[i],dp[i][j]); 
		}
	}
	for(int i=0;i<=h;i++){
		maxn=max(maxn,ma[i]);
	}
	cout<<maxn;
	return 0;
}

50分的

#include<bits/stdc++.h>
using namespace std;
long long n,h,d,a[2010][2010],dp[2010][2010],ma[2010];
long long b,c,maxn;
int main(){
	scanf("%d%d%d",&n,&h,&d);
	for(int i=1;i<=n;i++){
		scanf("%d",&b);
		for(int j=1;j<=b;j++){
			scanf("%d",&c);
			a[c][i]++;
		}
	}
	for(int i=h;i>=0;i--){
		for(int j=1;j<=n;j++){
			dp[i][j]=max(dp[i+1][j],ma[i+d])+a[i][j];
			ma[i]=max(ma[i],dp[i][j]); 
		}
	}
	for(int i=0;i<=h;i++){
		maxn=max(maxn,ma[i]);
	}
	cout<<maxn;
	return 0;
}
2023/7/18 10:02
加载中...