TLE 60分:
#include<bits/stdc++.h>
using namespace std;
int t,n,d,k,a[100005][5],maxx=0,x1,y2;
bool bz[100005];
int read(){
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-'){
f = -1;
}
c = getchar();
}
while(c >= '0' && c <= '9'){
x = x*10+c-'0';
c = getchar();
}
return x*f;
}
void dfs(int s,int x,int js,int l)
{
if(s+n-x-1<maxx)return;
if(x>=n)
{
if(maxx<s)
{
maxx=s;
x1=l;
y2=x-1;
}
return;
}
for(int i=0;i<d;i++)
{
if(bz[a[x][i]])
{
dfs(s+1,x+1,js,l);
return;
}
}
if(k<=js)
{
if(maxx<s)
{
maxx=s;
x1=l;
y2=x-1;
}
return;
}
for(int i=0;i<d;i++)
{
bz[a[x][i]]=1;
dfs(s+1,x+1,js+1,l);
bz[a[x][i]]=0;
}
}
int main()
{
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
t=read();
for(int i=0;i<t;i++)
{
n=read();d=read();k=read();
//memset(a,0,sizeof(a));
for(int k=0;k<n;k++)
for(int j=0;j<d;j++)
a[k][j]=read();
maxx=0;
for(int k=0;k<n;k++)
{
if(n-k-1<maxx)break;
dfs(1,k,0,k);
}
printf("Case #%d: %d %d\n",i+1,x1,y2);
}
}
求优化技巧QwQ