动态规划:背包
文章平均质量分 52
skajre
这个作者很懒,什么都没留下…
展开
-
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
多重背包裸题。 #include #include #include #include using 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 · 249 阅读 · 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 #include using原创 2016-09-10 10:22:13 · 181 阅读 · 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 #include using namespace std; const int maxn=10000+100; do原创 2016-09-13 15:42:28 · 171 阅读 · 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 · 247 阅读 · 0 评论 -
HDU 2844 Coins(多重背包+完全背包优化)
如果价值乘数量大于背包容量可以用完全背包优化,时间会快一点。 // // main.cpp // Richard // // Created by 邵金杰 on 16/9/13. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include using namespace s原创 2016-09-13 20:57:34 · 269 阅读 · 0 评论 -
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
// // main.cpp // Richard // // Created by 邵金杰 on 16/9/15. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include using namespace std; const int maxn=100+10; int p原创 2016-09-15 14:54:51 · 212 阅读 · 0 评论 -
HDU 1059 Dividing(dp多重背包)
// // main.cpp // Richard // // Created by 邵金杰 on 16/9/16. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include using 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 #include using 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 · 207 阅读 · 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 #include using namespa原创 2016-09-09 09:09:17 · 155 阅读 · 0 评论 -
HDU 1203 I NEED A OFFER!
#include #include #include #include using 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 #include using 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 · 248 阅读 · 0 评论 -
HDU 2546 饭卡
先把单价数组排序,取出最贵的赋值给MAX,然后再把m-5,用于购买这个最贵的,然后dp[j]表示在j元的情况下能买到的最多价值的东西,dp[m]代表代表m元能买到的最多。 #include #include #include #include using 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 #include using 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 #include using 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 · 179 阅读 · 0 评论 -
HDU 2955 Robberies
这道题要求的是逃跑几率高于一开始给出的逃跑纪律,所以要用钱数做背包来求逃跑几率的最大值。 #include #include #include #include using 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 #include usin原创 2016-07-06 19:54:04 · 166 阅读 · 0 评论 -
HDU 1864 最大报销额
a,b,c分别代表所报销类目的钱数,到最后整合为a+b+c ,那样就不会出现这张发票报销了一半,另一半无法报销的情况无法判断,有时候应该把事物整合成一个整体再进行处理。#include #include #include #include using 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 · 193 阅读 · 0 评论