URAL 1326(状态压缩DP)
来源:互联网 发布:js base64性能 编辑:程序博客网 时间:2024/06/14 04:29
题目链接:URAL 1326
解题思路:
状态压缩DP,也就是集合的DP,思路跟TSP问题很相似。需要注意的就是可以买多T^T
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;const int MAXN = 1<<20;int n,m,dp[MAXN+5],a[120+5],w[120+5];int main(){ while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); w[i] = 1<<(i-1); } scanf("%d",&m); int t,tmp,index=0,ans=INF; for(int i=1;i<=m;i++) { scanf("%d %d",&a[i+n],&t); while(t--) { scanf("%d",&tmp); w[i+n] |= 1<<(tmp-1); } } scanf("%d",&t); while(t--) { scanf("%d",&tmp); index |= 1<<(tmp-1); } memset(dp,INF,sizeof(dp)); dp[0]=0; for(int i=1;i<=n+m;i++) { for(int j=0;j<(1<<n);j++) { if(j&w[i]) dp[j] = min(dp[j], dp[j-(j&w[i])] + a[i]); } } for(int i=0;i<(1<<n);i++) if((index&i)==index) ans=min(ans,dp[i]); printf("%d\n",ans); } return 0;}
总结:
思路其实相当明显,只是一开始看的时候不相信这么高的复杂度能过~
0 0
- URAL 1326(状态压缩DP)
- 【算法设计与数据结构】URAL 1152.False Mirrors(状态压缩dp+dfs)
- URAL 1152 False Mirrors(简单的状态压缩dp)
- hdu1565(状态压缩dp)
- 状态压缩DP(二)
- 状态压缩dp(hdu3406)
- poj2411(状态压缩dp)
- poj1185(状态压缩dp)
- poj3311(状态压缩dp)
- poj3254(状态压缩dp)
- poj2288(状态压缩dp)
- hdu5045(状态压缩dp)
- nefu1109(状态压缩dp)
- hdu5045(压缩状态DP)
- hdu3001(状态压缩dp)
- bzoj1087(状态压缩dp)
- POJ3254(状态压缩DP)
- POJ2411(状态压缩DP)
- ASP.NET MVC 自定义后缀路由设置
- 数据结构之B树B+树
- ubuntu 开启ip包转发
- POJ2663 完美覆盖
- DOM的高级操作——表单的添加/删除/获取
- URAL 1326(状态压缩DP)
- Android权限管理
- win禁用睡眠(关屏不睡眠)
- 51Nod 1057 N的阶乘(数论)
- 名词解释之人身险保全
- xxxx和xxxx_s在VS2013中错误
- 基于TCP流协议的数据包通讯
- noj 1006 多项式乘法
- CMDB客户端检测的简单实现 (待续)