同一份代码,数组大小不同,一份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;
}