[vijos1426]兴奋剂检查(多维背包)
2017-10-25 09:01
155 查看
题目:
我是超链接题解:
来做一些很水的背包?多重背包?好多维的状态呢,这个东西很大啊f数组存不下怎么办?
给每种不同的包的组合编一个唯一的号即可,每一种方案对应cc[i]中的一个数字,类似于hash的思想
代码:
#include <cstdio> #include <iostream> using namespace std; int cc[10],v[10],dp[5000005],ans=0; int hash1(int a,int b,int c,int d,int e) { return a*(cc[2]+1)*(cc[3]+1)*(cc[4]+1)*(cc[5]+1)+b*(cc[3]+1)*(cc[4]+1)*(cc[5]+1)+c*(cc[4]+1)*(cc[5]+1)+d*(cc[5]+1)+e; } int main() { int n,m,i,j,a,b,c,d,e; scanf("%d%d",&n,&m); for (i=1;i<=m;i++) scanf("%d",&cc[i]); for (i=1;i<=n;i++) { int x; scanf("%d",&x); for (j=1;j<=m;j++) scanf("%d",&v[j]); for (a=cc[1];a>=v[1];a--) for (b=cc[2];b>=v[2];b--) for (c=cc[3];c>=v[3];c--) for (d=cc[4];d>=v[4];d--) for (e=cc[5];e>=v[5];e--) { int p=hash1(a,b,c,d,e),q=hash1(a-v[1],b-v[2],c-v[3],d-v[4],e-v[5]); dp[p]=max(dp[p],dp[q]+x); ans=max(ans,dp[p]); } } printf("%d",ans); }
相关文章推荐
- vijos1426兴奋剂检查(多维费用的背包问题+状态压缩+hash)
- vijos1426兴奋剂检查(多维费用的背包问题+状态压缩+hash)
- vijos1426 兴奋剂检查 - 动态规划
- 兴奋剂检查(vijos 1426)
- [vijos1426] 兴奋剂检查
- vijos1426(状态压缩背包dp)
- VIJOS P1426兴奋剂检查[DP 状态哈希]
- Vijos 1426 兴奋剂的检验
- vijos P1412多人背包 DP的前k优解
- HDU 4501 小明系列故事——买年货(多维背包)
- [jzoj]1501. 糖果(优化多维背包的多种方法)
- Vijos P1412 多人背包
- 新年趣事之打牌----VIJOS_1071----01背包加强版
- 依赖背包dp NOIP2006 vijos 1313 金明的预算方案
- vijos1059 积木城堡(背包)
- Vijos 1180 (树形DP+背包)
- vijos p1104(采药)(0-1背包)
- Vijos P1037 搭建双塔(动态规划,二维背包)
- vijos P1426兴奋剂检查 多维费用背包问题的hash
- hdu 4501 小明系列故事——买年货(多维费用01背包)