【DP】 HDU 3182 Hamburger Magi 状压
来源:互联网 发布:飞升元神升级数据 编辑:程序博客网 时间:2024/04/29 06:43
汉堡间有先吃后吃的关系
然后看注释
#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <cmath>using namespace std;#include <queue>#include <stack>#include <vector>#include <deque>#define cler(arr, val) memset(arr, val, sizeof(arr))typedef long long LL;const int MAXN = 15;const int MAXM = 6000010;const int INF = 0x3f3f3f3f;const int mod = 1000000007;int val[MAXN],cost[1<<MAXN],E[MAXN],last[MAXN];int dp[1<<MAXN];vector<int>G[MAXN];int n,m;void init(){ cler(last,0); cler(cost,0); cler(dp,-1); for(int i=0;i<n;i++) G[i].clear(); for(int i=0;i<(1<<n);i++)//存下每种状态所需要的钱 { for(int j=0;j<n;j++) { if(i&(1<<j)) cost[i]+=E[j]; } }}bool ok(int x,int p){ if((x&last[p])==last[p]&&cost[x]+E[p]<=m)//(x&last[p])==last[p]表示 return true; //吃第p个汉堡时x状态中要包含last[p]的状态 return false;}int main(){#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout);#endif int t; cin>>t; while(t--) { cin>>n>>m; for(int i=0;i<n;i++) cin>>val[i]; for(int i=0;i<n;i++) cin>>E[i]; init(); for(int i=0;i<n;i++) { int x,y; scanf("%d",&x);//第i个汉堡之前需要吃的先存下状态 while(x--) { cin>>y; y--; last[i]|=1<<y; } } int ans=0; dp[0]=0; for(int i=0;i<(1<<n);i++) { if(dp[i]==-1) continue;//未到达的状态不转 for(int j=0;j<n;j++) { if(ok(i,j)&&(i&(1<<j))==0) { dp[(1<<j)|i]=dp[i]+val[j]; ans=max(dp[(1<<j)|i],ans); } } } cout<<ans<<endl; } return 0;}
0 0
- 【DP】 HDU 3182 Hamburger Magi 状压
- HDU 3182 Hamburger Magi(状压dp)
- HDU 3182 Hamburger Magi(状压dp)
- HDU 3182 Hamburger Magi(状压DP)
- hdu 3182 Hamburger Magi(状压dp)
- HDU 3182 Hamburger Magi(状压DP)
- hdu 3182 Hamburger Magi 状压
- HDU 3181 Hamburger Magi(状压DP)
- hdu 3182 Hamburger Magi
- HDU 3182-Hamburger Magi
- HDU3182 - Hamburger Magi(状压DP)
- hdu3182---Hamburger Magi(状压dp)
- hdu 3182 Hamburger Magi(状态压缩DP)
- HDOJ 3182 Hamburger Magi
- hdu_3182_Hamburger Magi(状压DP)
- HDU3182 Hamburger Magi(状态压缩)
- hdu3182Hamburger Magi dp+压缩状态
- HDU 3182 状压DP
- Struts2 MySQL数据库访问
- GPU架构解析——NVIDIA\AMD
- VNC介绍(第二篇)
- C语言获取数组长度示例
- linux学习笔记
- 【DP】 HDU 3182 Hamburger Magi 状压
- hdu4292 Food --- 最大流
- js生成input file并调用click问题
- IOS基础之路
- 漫谈并发编程(五):线程之间的协作
- 栈和队列(10.1)
- iOS:NSDate生日或指定日期间剩余天数的判断
- LeetCode:Maximum Product Subarray
- 两点距离