![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划:背包
文章平均质量分 52
skajre
这个作者很懒,什么都没留下…
展开
-
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
多重背包裸题。#include#include#include#includeusing namespace std;const int maxn=100+10;int n,m;int p[maxn],h[maxn],c[maxn];int f[maxn];int main(){ int t; scanf("%d",&t); while(t--)原创 2016-07-11 18:40:40 · 246 阅读 · 0 评论 -
HDU 1171 Big Event in HDU(多重背包)
f[j]=max(f[j],f[j-k*v[i]]+k*v[i])。内层循环时逆序。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/10.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing原创 2016-09-10 10:22:13 · 180 阅读 · 0 评论 -
HDU 1203 I NEED A OFFER!(01背包)
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/13.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespace std;const int maxn=10000+100;do原创 2016-09-13 15:42:28 · 162 阅读 · 0 评论 -
HDU 2159 FATE(二维完全背包)
二位背包其实和一维一样,只是多了一个限制条件,一维一般是体积,这里二维是耐力和杀敌数,因为求最小耐力,所以耐力循环在杀敌循环外面,并且想要拿到经验,最少都要从b[i]开始。完全背包是循环是顺序的。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/13.// Copyright © 2016年 邵金杰. All rights re原创 2016-09-13 16:37:00 · 236 阅读 · 0 评论 -
HDU 2844 Coins(多重背包+完全背包优化)
如果价值乘数量大于背包容量可以用完全背包优化,时间会快一点。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/13.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespace s原创 2016-09-13 20:57:34 · 264 阅读 · 0 评论 -
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/15.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespace std;const int maxn=100+10;int p原创 2016-09-15 14:54:51 · 210 阅读 · 0 评论 -
HDU 1059 Dividing(dp多重背包)
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/16.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespace std;int v[7];int dp[120000+100]原创 2016-09-16 19:28:08 · 196 阅读 · 0 评论 -
HDU 5887 Herbs Gathering(01背包搜索)
#include#include#include#includeusing namespace std;const int maxn=100+10;typedef long long ll;ll w[maxn],v[maxn];ll r[maxn];ll n,k;ll ans,t;int cmp(const int i,const int j) {return (double原创 2016-09-20 23:58:15 · 186 阅读 · 0 评论 -
HDU 2955 Robberies(01背包)
题目给出一个几率,求出小于这个几率的最多钱,这是典型的01背包。后面给出是m万钱,q的几率被抓。可以反推生存几率来求出被抓几率,所以状态转移就是f[j]=max(f[j],f[j-m[i]]*(1-q[i]))。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/8.// Copyright © 2016年 邵金杰. Al原创 2016-09-08 14:31:55 · 207 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(dp完全背包)
状态转移f[j]=min(f[j],f[j-w[i]]+p[i])。内层循环为递增。原创 2016-09-10 08:34:49 · 198 阅读 · 0 评论 -
HDU 2602 Bone Collector(01背包)
状态转移f[j]=max(f[j],f[j-v[i]]+w[i])。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/9.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespa原创 2016-09-09 09:09:17 · 155 阅读 · 0 评论 -
HDU 1203 I NEED A OFFER!
#include#include#include#includeusing namespace std;const int maxn=10000+10;int a[maxn];float f[maxn],b[maxn];int main(){ int n,m; while(scanf("%d%d",&n,&m)&&(n||m)) { for原创 2016-07-11 20:55:07 · 189 阅读 · 0 评论 -
uva 12563 Jin Ge Jin Qu hao
#include#include#include#includeusing namespace std;int d[55][9010];int main(){ int m; cin>>m; int kase=0; while(m--) { int n,t; cin>>n>>t; int T[55]原创 2016-07-06 09:20:28 · 246 阅读 · 0 评论 -
HDU 2546 饭卡
先把单价数组排序,取出最贵的赋值给MAX,然后再把m-5,用于购买这个最贵的,然后dp[j]表示在j元的情况下能买到的最多价值的东西,dp[m]代表代表m元能买到的最多。#include#include#include#includeusing namespace std;int dp[1010];int price[1010];int main(){ int n;原创 2016-07-06 11:36:11 · 160 阅读 · 0 评论 -
HDU 1171 Big Event in HDU
#include#include#include#includeusing namespace std;int val[5005];int dp[255555];int main(){ int n; while(cin>>n&&(n>0)) { memset(dp,0,sizeof(dp)); memset(val,0,siz原创 2016-07-06 12:38:05 · 161 阅读 · 0 评论 -
HDU 2602 Bone Collector
#include#include#include#include#includeusing namespace std;int dp[1010];int val[1010];int vol[1010];int main(){ int n; scanf("%d",&n); while(n--) { int k,v;原创 2016-07-06 15:33:47 · 176 阅读 · 0 评论 -
HDU 2955 Robberies
这道题要求的是逃跑几率高于一开始给出的逃跑纪律,所以要用钱数做背包来求逃跑几率的最大值。#include#include#include#includeusing namespace std;int main(){ int t; scanf("%d",&t); while(t--) { float dp[10000];原创 2016-07-06 16:09:46 · 160 阅读 · 0 评论 -
HDU 3466 Proud Merchants
这道题有一个q[i]的限制,像HDU饭卡那道题一样,那题q[i]恒为5,此题是变的,所以需要排序,因为如果不排序,散乱的话有可能前一个导致的状态的改变后一个利用不到,所以一开始(x,m)这个区间的范围要大,也就是x要小,那么后面的状态就可以背前面的状态影响,那么x就是这个区间的下限,这个下线就是q[i]-p[i].#include#include#include#includeusin原创 2016-07-06 19:54:04 · 166 阅读 · 0 评论 -
HDU 1864 最大报销额
a,b,c分别代表所报销类目的钱数,到最后整合为a+b+c ,那样就不会出现这张发票报销了一半,另一半无法报销的情况无法判断,有时候应该把事物整合成一个整体再进行处理。#include#include#include#includeusing namespace std;int dp[3000005];int money[35];int main(){ float x,y;原创 2016-07-06 21:13:27 · 181 阅读 · 0 评论 -
HDU 1864 最大报销额(01背包)
定义状态f[x]表示x的报销额下最大能报销的费用,状态转移f[j]=max(f[j],f[j-G[i]]+G[i])。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/8.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#inclu原创 2016-09-08 16:27:21 · 183 阅读 · 0 评论