比赛 |
20241125 |
评测结果 |
WAWAATTTT |
题目名称 |
夏娜的菠萝包 |
最终得分 |
33 |
用户昵称 |
黄天宇 |
运行时间 |
7.526 s |
代码语言 |
C++ |
内存使用 |
3.35 MiB |
提交时间 |
2024-11-25 11:07:47 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int T;
int n,m;
const int MAXN=105;
struct edge{
int v;
int d;
int tt;
}e[MAXN];
struct mat{
int s;
int de;
int t;
}w[MAXN];
int E;
int k[MAXN];
int num[MAXN][MAXN];
bool bo1,bo2,flag[MAXN];
int maxx;
void dfs(int nowt,int now,int sum){
bo2=0;
bo1=0;
for(int i=1;i<=n;i++){
if(!flag[i]){
bo2=1;
break;
}
}
maxx=max(maxx,sum);
if(!bo2||now==m+1){
return;
}
for(int i=1;i<=m;i++){
if(w[i].t<=nowt) continue;
for(int j=1;j<=k[i];j++){
if(flag[num[i][j]]) bo1=1;
}
if(bo1){
bo1=0;
continue;
}
for(int j=1;j<=k[i];j++){
flag[num[i][j]]=1;
}
dfs(nowt+1,now+1,sum+w[i].s-nowt*w[i].de);
for(int j=1;j<=k[i];j++){
flag[num[i][j]]=0;
}
}
}
int main(){
freopen("shana.in","r",stdin);
freopen("shana.out","w",stdout);
while(cin>>n){
if(n==0) break;
memset(flag,0,sizeof(flag));
memset(e,0,sizeof(e));
memset(num,0,sizeof(num));
memset(w,0,sizeof(w));
for(int i=1;i<=n;i++){
cin>>e[i].v>>e[i].d;
if(e[i].v%e[i].d==0) e[i].tt=e[i].v/e[i].d;
else e[i].tt=e[i].v/e[i].d+1;
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>k[i]>>E;
w[i].t=10000;
for(int j=1;j<=k[i];j++){
cin>>num[i][j];
w[i].s+=e[num[i][j]].v;
w[i].de+=e[num[i][j]].d;
w[i].t=min(w[i].t,e[num[i][j]].tt);
}
w[i].s+=E;
}
maxx=0;
dfs(0,1,0);
cout<<maxx<<endl;
maxx=0;
}
return 0;
}