hdu 3182(状压dp)
来源:互联网 发布:文心雕龙数据库有吗 编辑:程序博客网 时间:2024/06/01 08:01
传送门
题解:
略,满足条件就转移,否则不转移,完了。
调了一晚上。。。
只有复杂度允许,能for的就for(比如dp时内层对n的循环),不要为了追求一点速度就去写什么lowbit来提取二进制的1,此可谓弄巧成拙。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,m,v[16],c[16],pre[16];int dp[1<<16];inline int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();return x*f;}int main() {//freopen("hdu 3182.in","r",stdin);int kase=read();while (kase--) {memset(dp,0,sizeof(dp));memset(pre,0,sizeof(pre));n=read(),m=read();for (int i=0;i<n;++i) v[i]=read();for (int i=0;i<n;++i) c[i]=read();for (int i=0;i<n;++i) {int num=read();while (num--) {int x=read()-1;pre[i]|=(1<<x);}}for (int st=0;st<(1<<n);++st) {int tmp=st,cost=0;for (int p=0;p<n;++p)if (st&(1<<p)) cost+=c[p];if (cost>m||!dp[st]&&st) continue;for (int p=0;p<n;++p)if (!(st&(1<<p))&&(pre[p]&st)==pre[p]&&cost+c[p]<=m)dp[st|(1<<p)]=max(dp[st|(1<<p)],dp[st]+v[p]);}int ans=0;for (int st=0;st<(1<<n);++st) ans=max(ans,dp[st]);printf("%d\n",ans);}return 0;}
阅读全文
0 0
- hdu 3182(状压dp)
- HDU 3182 状压DP
- HDU 3182 Hamburger Magi(状压dp)
- HDU 3182 Hamburger Magi(状压dp)
- hdu 3182 Hamburger Magi(状压dp)
- HDU 3182【状压DP--easy】
- hdu 3001(状压dp)
- hdu 2686(状压dp)
- hdu 2809(状压dp)
- hdu 4640(状压dp)
- hdu 5823(状压DP)
- 【DP】 HDU 3182 Hamburger Magi 状压
- HDU 3182 Hamburger Magi(状压DP)
- HDU 3182 Hamburger Magi(状压DP)
- HDU 1074 Doing Homework (状压+DP) 初学dp笔记
- HDU 4284--Travel(状压dp+TSP)
- hdu 4804 Campus Design (状压dp)
- hdu 3001(状压dp, 3进制)
- Struts2:一
- Mysql架构组成之存储引擎总结
- Java-String总结
- ACL访问控制列表
- 轨迹数据挖掘(trajectory data mining)
- hdu 3182(状压dp)
- 泛函分析简列:度量空间之逼近定理及有穷维B*空间刻画
- hive分区表几大注意事项
- Java堆栈常量池深入
- tomcat手动部署war包
- 深度学习与传统机器学习算法的区别与应用
- ARP地址解析协议
- 阵元校正
- [bzoj1095][ZJOI2007]Hide 捉迷藏(动态点分治)