摘要: 01背包问题,设f[i]为拿了i件能得到的最大价值。关于限制条件Q只要在每次更新f[i]的值的时候都判断当前值是否是小于Q的最大值即可#include #include #include using namespace std;const int maxn = 31;double f[maxn],val[400];int main() { int N; double Q; while(scanf("%lf%d",&Q,&N),N) { memset(f,0,sizeof(f)); double ans = 0; for(int i = 0;i 'C& 阅读全文
posted @ 2014-01-23 15:26 acm_roll 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题意大概是一个小哥要去抢银行,他列出了几个银行的价值和被抓概率,然后定了一个最高被抓概率,求最多可以抢多少价值的东西。一开始想成是被抓概率简单叠加了,写了个简单的背包就直接提交,WA..o(╯□╰)o不过确实是背包问题,不过求的值是逃跑概率,然后只要在能逃跑的范围内找最大价值就好了。#include #include #include using namespace std;double f[10001],p[150],P;int m[150];int main() { int T,n; scanf("%d",&T); while(T--) { int sum = 阅读全文
posted @ 2014-01-23 13:57 acm_roll 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 一个典型的有依赖的背包问题。这里每种物品最多只可能有三个附属品,我看错了题目条件,写了一个可能有n个附属品的版本。o(╯□╰)o可以将物品按照附属关系先进行分组,对每组都来一次01背包。#include #include #include using namespace std;const int maxn = 100;const int maxv = 3201;struct Item { int cost,w,child,cnum[maxn],fa;};Item itm[maxn];int f[maxv],g[maxv];int main() { int n,limv; scanf(&quo 阅读全文
posted @ 2014-01-23 10:15 acm_roll 阅读(282) 评论(0) 推荐(0) 编辑