背包
算球?
在校学生
展开
-
poj 3624 Charm Bracelet(01背包)
裸的01背包#include <stdio.h>#define max(a,b) a > b ? a:bconst int MAXN = 5010;int v[MAXN];int w[MAXN];int dp[MAXN*3];int N,W;void solve(){ for(int i = 0; i < N; ++i) { for(int j = W;原创 2017-08-10 23:23:29 · 211 阅读 · 0 评论 -
poj 1787 Charlie's Change(完全背包 或 多重背包 记录路径)
多重背包,但是可以用完全背包来做。 参考:http://www.cnblogs.com/kuangbin/archive/2012/09/20/2695803.html#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const in原创 2017-08-14 16:09:22 · 409 阅读 · 0 评论 -
poj 2392 Space Elevator(多重背包)
先排序,再背包。#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int MAXN = 500;int dp[MAXN*100];struct block{ int h,a,c;};block bs[MAXN];bool cmp(const block& a,原创 2017-08-15 22:17:02 · 207 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(多重背包可行性)
总价值的一半为背包容量,可以多重背包,可以转成完全背包#include <bits/stdc++.h>using namespace std;const int MAXN = 10000;int num[MAXN];int dp[MAXN*100];int v[MAXN];int n,sum,W;int main(){ ios::sync_with_stdio(false);原创 2017-08-15 22:11:28 · 236 阅读 · 0 评论 -
poj 1384 Piggy-Bank(完全背包)
求刚好装满的最小价值#include <stdio.h>#include <string.h>#define min(a,b) (a)>(b)?(b):(a)const int INF = 0x3f3f3f3f;int dp[10010];int w[10010],v[10010];int E,F,W,n;void solve(){ for(int i = 0; i < n;原创 2017-08-12 12:32:39 · 240 阅读 · 0 评论 -
poj 3181 Dollar Dayz(完全背包)
要用大数。。#include <stdio.h>#include <string.h>#define max(a,b) (a)>(b)?(a):(b)struct BigInt{ const static int mod = 10000; const static int DLEN = 4; int a[100],len; BigInt() {原创 2017-08-13 23:46:08 · 222 阅读 · 0 评论 -
UVA 147 Dollars(完全背包)
和uva647基本一样,注意精度#include <bits/stdc++.h>using namespace std;const int MAXN = 33333;int w[11] = {5,10,20,50,100,200,500,1000,2000,5000,10000};int W;long long dp[MAXN];void solve(){ memset(dp,0,原创 2017-08-13 23:20:15 · 202 阅读 · 0 评论 -
UVA 674 Coin Change(完全背包)
基础题#include <bits/stdc++.h>using namespace std;const int MAXN = 10000;int dp[MAXN];int w[5] = {1,5,10,25,50};int W;void solve(){ for(int i = 0; i < 5; ++i) { for(int j = w[i]; j <=原创 2017-08-13 22:56:53 · 237 阅读 · 0 评论 -
poj 1252 Euro Efficiency(完全背包)
参考:http://blog.csdn.net/a601025382s/article/details/9376637 第一次碰到这种,先正着背个包,再反过来背包,正着是直接用钱组合出来的,反过来的是计算找零的#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int MAXN原创 2017-08-12 19:59:54 · 326 阅读 · 0 评论 -
poj 2063 Investment(完全背包)
多次完全背包 要对背包的容量进行压缩,不然超内存 因为债券的价格都是1000的倍数,就除1000来压缩#include <stdio.h>#include <string.h>#define max(a,b) (a)>(b)?(a):(b)int w[15];int v[15];int dp[50000];int W,n;void solve(){ for(int i = 0原创 2017-08-12 10:59:24 · 258 阅读 · 0 评论 -
hdu 2955 Robberies(01背包)
这题的最难之处,就是看不懂题目啥意思。 看懂就好说了,总钱数做背包容量,题目意思看的别人题解。。。#include <bits/stdc++.h>using namespace std;double p[110];double dp[10010];int money[110];double tp;int n,sum;int res;void solve(){ memset(d原创 2017-08-11 09:53:34 · 191 阅读 · 0 评论 -
UVA 562 Dividing coins(01背包)
总钱数的一半做背包容量#include <bits/stdc++.h>using namespace std;int n,sum,W,res;int coins[110];int dp[50010];void solve(){ memset(dp,0,sizeof(dp)); W = sum/2; for(int i = 0; i < n; ++i) {原创 2017-08-11 09:51:19 · 220 阅读 · 0 评论 -
hdu 2546 饭卡(01背包)
开始想怎么让他剩下至少5块,然后再花呢,先把那5块拿出来花掉不就行了 先拿出5块前来买掉最贵的东西,剩下的钱当背包 要考虑m<5的情况,在这里wa了一发#include <bits/stdc++.h>using namespace std;const int MAXN = 1010;int cost[MAXN];int dp[MAXN*50];int n,m,maxn,res;void原创 2017-08-11 09:49:26 · 162 阅读 · 0 评论 -
poj 1976 A Mini Locomotive(01背包)
给你n个数,表示n个车厢拉的人数,给你三个小火车头,每个火车头可以拉连续的k节车厢,问这三个小火车头最多可以拉走多少人 dp[i][j]表示前i个火车头从前j节车厢最多可以拉多少人 dp[i][j]=max(dp[i-1][j-k]+preSum[j]-preSum[j-k],dp[i][j-1]) preSum表示前缀和,preSum[j]-preSum[j-k]表示从j开始往前k个车厢的总原创 2017-08-11 00:24:36 · 260 阅读 · 0 评论 -
poj 1745 Divisibility(01背包)
我看的那背包专辑把这个放01背包里了,感觉并不像啊。 (a+b)%mod=(a%mod+b%mod)%mod dp[i][j]==true表示表示前i个数字经过加加减减的操作后,%K=j,dp[i][j]==false,那就是%K!=j。然后对下一个数字num计算(j+num)%K和(j-num)%K,然后标记,最后如果dp[N][0]==true,则说明前边那些数字经过++–的操作后能被K整除原创 2017-08-10 23:51:08 · 232 阅读 · 0 评论 -
poj 3211 Washing Clothes(分组01背包)
夫妻俩洗衣服,他俩一块洗,必须要一块先洗完同一种颜色的衣服,才能洗另一种颜色的衣服。 按照衣服颜色分类,对于每种颜色的衣服进行01背包,最后加和。 对于每种颜色,背包容量就是洗完当前颜色所有衣服花费总时间的一半。因为要求时间最短,所以夫妻俩洗衣服的时间相差越小越好,所以是一半喽,然后算出这一半时间内的洗衣服最多花费多长时间,总时间减去他,就是他对象洗衣服花费的时间,就是那个较长的时间。#incl原创 2017-08-10 23:33:00 · 261 阅读 · 0 评论 -
poj 3628 Bookshelf 2(01背包)
有n头牛,摞在一块,让他们的高度超过B,从超过B的高度中,找到最小的那个,求他和B的差。 以所有牛摞一块的高度为背包#include <stdio.h>#define max(a,b) a>b?a:b#define min(a,b) a>b?b:aconst int MAXN = 20000010;int N,B,sum = 0;int height[25];int dp[MAXN];原创 2017-08-10 23:27:08 · 206 阅读 · 0 评论 -
51nod 1007 正整数分组(01背包)
题目分类是动态规划,初看题目我只想到了搜索。怕超时,没写。看了下讨论版,才知道是01背包。 摘自讨论版:TIPS: 和最大为10000,两组最小的差值应该逼进sum / 2,所以当确定了sum/2 即可对N[i] < sum / 2的进行dp。之后再计算差值即可#include <cstdio>#include <cstring>#include <algorithm>using names原创 2017-05-09 18:00:55 · 274 阅读 · 0 评论