D - Goin' to the Zoo

题目链接;https://atcoder.jp/contests/abc404/tasks/abc404_d

题意:

n个动物园,每个动物园票价不同,m个动物,给定每个动物分布在动物园的情况

求观看m个动物2次的最小票价

思路:

3^n x m 的搜索

int a[15];
int n,m;
vector<int>g[15];
int ans=llmax;
int res;
int vis[105];
void dfs(int x,int u,int res){
    if(x==n){
        for(int i=1;i<=m;i++){
            if(vis[i]<2)return;
        }
        ans=min(ans,res);
        return;
    }

    for(int i=0;i<=2;i++){
        for(int j=0;j<g[x+1].size();j++){
            vis[g[x+1][j]]+=i;
        }
        dfs(x+1,i,res+i*a[x+1]);
        for(int j=0;j<g[x+1].size();j++){
            vis[g[x+1][j]]-=i;
        }
    }

}
void solve(){
    cin>>n>>m;
    rep(i,1,n)cin>>a[i];
    rep(i,1,m){
        int k;cin>>k;
        for(int j=1;j<=k;j++){
            int x;cin>>x;
            g[x].pb(i);
        }
    }

    for(int i=0;i<=2;i++){
        for(int j=0;j<g[1].size();j++){
            vis[g[1][j]]+=i;
        }
        dfs(1,i,i*a[1]);
        for(int j=0;j<g[1].size();j++){
            vis[g[1][j]]-=i;
        }
    }

    cout<<ans<<endl;
}
posted @ 2025-05-05 19:58  Marinaco  阅读(33)  评论(0)    收藏  举报
//雪花飘落效果