记录编号 |
597493 |
评测结果 |
TTTTEWWWTTTTEEEEEEEE |
题目名称 |
魔法卡片 |
最终得分 |
0 |
用户昵称 |
黄天宇 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
20.910 s |
提交时间 |
2024-11-28 15:14:35 |
内存使用 |
9.66 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e3+5;
int n,m,q;
int num[MAXN];
bool flag[MAXN];
int vis[MAXN];
int cnt[MAXN];
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int maxx;
void dfs(int now,int r,int sum){
if(now==r+1){
maxx=max(maxx,sum);
return;
}
for(int i=0;i<=1;i++){
if(i==0){
int x=0;
for(int j=1;j<=num[now];j++){
if(!vis[a[now][j]]){
x+=a[now][j]*a[now][j];
}
vis[a[now][j]]++;
}
dfs(now+1,r,sum+x);
for(int j=1;j<=num[now];j++){
vis[a[now][j]]--;
}
}
if(i==1){
int x=0;
for(int j=1;j<=cnt[now];j++){
if(!vis[b[now][j]]){
x+=b[now][j]*b[now][j];
}
vis[b[now][j]]++;
}
dfs(now+1,r,sum+x);
for(int j=1;j<=cnt[now];j++){
vis[b[now][j]]--;
}
}
}
}
int main(){
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>num[i];
for(int j=1;j<=num[i];j++){
cin>>a[i][j];
flag[a[i][j]]=1;
}
for(int j=1;j<=m;j++){
if(!flag[j]){
b[i][++cnt[i]]=j;
}
}
}
for(int i=1;i<=q;i++){
int l,r;
cin>>l>>r;
dfs(l,r,0);
memset(vis,0,sizeof(vis));
cout<<maxx<<endl;
}
return 0;
}