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;
}

浙公网安备 33010602011771号