关注
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f3f3f
const int N=1<<16;
#define ll long long
int a[20],dp[N],v[N];
int dfs(int st,int now)
{
if(~dp[st])return dp[st];
int ans=0;
for(int s=st; s; s=(s-1)&st)
if(v[s])ans=max(dfs(st-s,now+v[s])+a[now+v[s]],ans);
return dp[st]=ans;
}
int main()
{
int n,m,s=0;
cin>>n>>m;
for(int i=0; i<n; i++)
cin>>a[i],s+=a[i];
sort(a,a+n,greater<int>());
for(int i=0; i<m; i++)
{
int x,y;
cin>>x;
int st=0;
for(int j=0; j<x; j++)
{
cin>>y;
y--;
st|=(1<<y);
}
v[st]=x;
}
memset(dp,-1,sizeof dp);
s-=dfs((1<<n)-1,-1);
cout<<s<<endl;
}
一开始想通过m个状态来组合出最优的,想到m^2都不能跑就觉得好难。后来经过提示复杂度O(3^n)后,才想到枚举子集的子集。反过来确定是否有m。太爽了,自己想到的感觉是不一样
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习没人带,苟住还是跑路? #
7336次浏览 164人参与
# 大家实习都在做什么? #
6452次浏览 61人参与
# 对2025年忏悔 #
1645次浏览 40人参与
# 我们是不是被“优绩主义”绑架了? #
6900次浏览 238人参与
# 元旦假期你打算怎么过 #
5084次浏览 130人参与
# 电网笔面经互助 #
56798次浏览 470人参与
# 春招前还要继续实习吗? #
1766次浏览 27人参与
# 毕业论文怎么查AI率 #
70133次浏览 1941人参与
# 非技术2024笔面经 #
451329次浏览 4918人参与
# 一人说一家双休的公司 #
4019次浏览 60人参与
# 你做过哪些dirty work #
25080次浏览 155人参与
# 参加过提前批的机械人,你们还参加秋招么 #
105497次浏览 1649人参与
# 牛客2025仙途报告 #
30471次浏览 392人参与
# 联影求职进展汇总 #
165141次浏览 832人参与
# 面试官问过你最刁钻的问题是什么? #
4388次浏览 59人参与
# 你们的毕业论文什么进度了 #
1223964次浏览 9903人参与
# 硬件人秋招进展 #
262608次浏览 3963人参与
# 晒一晒你收到的礼盒 #
93234次浏览 446人参与
# 实习心态崩了 #
96851次浏览 495人参与
# 找工作,行业重要还是岗位重要? #
88917次浏览 1777人参与
