裸的状压dp。

设f[i][j]表示在i字数内放j集合的分部,直接sb转移。

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*f;
}
int n,p,fir[101],dis[201],nxt[201],id;
il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
int W[101][13],WW[101][1<<12],s[1<<12],S[1<<12],lg[1<<12];
int f[101][1<<12],F[1<<12],G[1<<12],U;
il vd dfs(int x,int fa=-1){for(int i=fir[x];i;i=nxt[i])if(fa!=dis[i])dfs(dis[i],x);memset(F,-63,sizeof F);F[0]=0;// F[o] 表示 放集合为o的部门的最大收益for(int i=fir[x];i;i=nxt[i])if(fa!=dis[i]){memcpy(G,F,sizeof F);for(int j=U;;j=(j-1)&U){for(int k=j;;k=(k-1)&j){F[j]=std::max(F[j],G[k]+f[dis[i]][j^k]);if(!k)break;}if(!j)break;}}for(int i=U;;i=(i-1)&U){for(int j=i;;j=(j-1)&i){f[x][i]=std::max(f[x][i],S[i]+F[j]-WW[x][i^j]);if(!j)break;}if(!i)break;}
}
int main(){
#ifndef ONLINE_JUDGEfreopen("2465.in","r",stdin);freopen("2465.out","w",stdout);
#endifmemset(f,-63,sizeof f);n=gi(),p=gi();int u,v,w;U=(1<<p)-1;for(int i=1;i<n;++i)u=gi(),v=gi(),link(u,v),link(v,u);for(int i=0;i<p;++i)lg[1<<i]=i;for(int i=1;i<=n;++i){for(int j=1;j<=p;++j)W[i][j]=gi();for(int j=1;j<1<<p;++j)WW[i][j]=WW[i][j-(j&-j)]+W[i][lg[j&-j]+1];}int T=gi();while(T--){u=gi(),v=gi(),w=0;while(v--)w|=1<<gi()-1;s[w]+=u;}for(int i=0;i<1<<p;++i)for(int j=i;;j=(j-1)&i){S[i]+=s[j];if(!j)break;}dfs(1);printf("%d\n",f[1][U]);return 0;
}

转载于:https://www.cnblogs.com/xzz_233/p/9804474.html

洛咕 P2465 [SDOI2008]山贼集团相关推荐

  1. P2465 [SDOI2008]山贼集团 dp

    这个题是一道树形dp+状压dp二合一,先预处理每种组合会有什么额外的费用,然后在树上dp就行了. 题干: 题目描述某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个 ...

  2. [SDOI2008]山贼集团【树上背包+状压】

    洛谷P2465 SOL 比较经典的一类树上背包问题套一个子集状压枚举. 注意到代价的计算与所选的点的集合有关,如果我们要统计代价需要状压记录点集,而数据范围非常配合的给了P≤12P\le12P≤12, ...

  3. 【学术篇】SDOI2008 山贼集团

    今天一月一号.. 突然想安利一波我的中二的2017总结- 传送门1:codevs 传送门2:luogu 时限5s和1s的区别(你没看我传送门都给的大牛分站了) 现在不仅线筛.. 有负数的快读都打不对了 ...

  4. 【[SDOI2008]山贼集团】

    非常好的一道题 树上的状压\(dp\) 根据数据范围我们就能知道这是一道需要状压的题目 所以状态就是\(dp[i][S]\)表示在以\(i\)为根的子树里,选择的状态为\(S\)的最大收益 这个收益只 ...

  5. 洛咕 P2463 [SDOI2008]Sandy的卡片

    哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...

  6. 【SDOI2008】山贼集团

    本题的模型是树形状态压缩的动态规划. 首先考虑简单的题目模型:对于任何形态的有根树 T,都可以建立其等效二叉树 T',若在原树 T 中,结点 x 有儿子c1,c2,c3,-,ck c1,c2,c3,- ...

  7. [FROM WOJ]#2040 山贼集团

    #2040 山贼集团 SDOI2008 题面 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,2,3, ...

  8. 山贼集团 (group)

    山贼集团 (group) 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,2,3,4,-,n ...

  9. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

最新文章

  1. JAXB 转 XML乱码
  2. hadoop日志数据分析开发步骤及代码
  3. The Maximum Unreachable Node Set
  4. 【转】Hibernate和IBatis对比
  5. QT学习:模型/视图基本概念
  6. 不来这里买器件?亏大发了!
  7. And Then There Was One POJ - 3517(变形约瑟夫环+规律)
  8. 制作html弹窗,js制作一个简单的div弹窗:
  9. [UE4]多个Montage之间存在协作问题
  10. Origin绘制热力图
  11. NVIDIA/Apex安装时遇到 C++编译:unrecognized command line option ‘-std=c++14’ 错误解决
  12. 折扇的保养方法是什么?
  13. UNet以ResNet34为backbone in keras
  14. javaScript遍历对象
  15. 算法第四版C++算法实现全集
  16. 阿里大淘系模型治理阶段性分享
  17. 分享丨人脸数据集的史上最大规模调查
  18. el-table 表格内容多一根线的解决办法
  19. 如何调教ChatGPT成为你的策略助手
  20. IT行业的各大排行榜

热门文章

  1. CDH kudu Unable to load consensus metadata for tablet
  2. XCode官方直接下载地址
  3. 两周年无人问津,EOS到底做错了什么
  4. 提问的艺术:如何通过提示词让 ChatGPT 更准确地理解你的问题?
  5. 对象 php 输出用字符串连接,在PHP中使用 在使用echo或print输出对象时将对象转化为字符串。_学小易找答案...
  6. 证件类型、证件号码、性别、出生日期校验(身份证、户口簿、港澳居民居住证、台湾居民居住证、港澳居民来往内地通行证、台湾居民来往大陆通行证、境外永久居住证、外国人永久居留身份证、护照、其他)
  7. 【Java】有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
  8. R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
  9. programming notes - 在线学习资源
  10. .Net Core 文件的上传下载