比赛 20241125 评测结果 WWWWWWTTT
题目名称 夏娜的菠萝包 最终得分 0
用户昵称 黄天乐 运行时间 7.261 s
代码语言 C++ 内存使用 81.43 MiB
提交时间 2024-11-25 11:20:57
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=(2<<14)+5;
int n,m;
int t[25],d[25],c[25];
long long s[25];
int k[25],e[25];
int de[25],sum[25],last[25];
int f[MAXN][25][25];//fkji 初始使用的面包i选j组合第k天 
long long b[25];
int ans;
int main(){
    freopen("shana.in","r",stdin);
    freopen("shana.out","w",stdout);
    while(1){
        memset(s,0,sizeof(s));
        memset(last,0x3f,sizeof(last));
        memset(de,0,sizeof(de));
        memset(sum,0,sizeof(sum));
        memset(f,0,sizeof(f));
        cin>>n;
        if(n==0)return 0;
        b[0]=1;
        for(int i=1;i<=n;i++){
            cin>>t[i]>>d[i];
            if(t[i]%d[i]==0)c[i]=t[i]/d[i];
            else c[i]=t[i]/d[i]+1;
            b[i]=b[i-1]*2;
        }
        cin>>m;
        for(int i=1;i<=m;i++){
            cin>>k[i]>>e[i];
            for(int j=1;j<=k[i];j++){
                int x,y;
                cin>>x;
                s[i]+=b[x-1];
                de[i]+=d[x];
                sum[i]+=t[x];
                last[i]=min(last[i],c[x]);
            }
            sum[i]+=e[i];
        }
        for(int i=1;i<=m;i++){
            f[s[i]][i][1]=sum[i];
        }
        for(int i=1;i<=b[n]-1;i++){
            for(int j=1;j<=m;j++){
                for(int p=1;p<=last[j];p++){
                    for(int q=0;q<=m;q++){
                        if(p<=last[q]&&((i&s[j])==s[j])&&(((i^s[j])&s[q])==s[q])){
                            f[i][j][p]=max(f[i][j][p],f[(i^s[j])][q][p-1]+sum[j]-de[j]*(p-1));
                        }
                    }
                }
            }
        }
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                ans=max(ans,f[b[n]-1][i][j]);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}