hdu 2602(01背包)

01背包:有N件物品和一个容量为V 的背包。放入第i件物品耗费的空间是Ci,得到 的价值是Wi。求解将哪些物品装入背包可使价值总和最大。(每件物品只有一件,放或者不放)

即F[i,v]表示前i件物品恰放入一个容量为v的背包可以 获得的最大价值。则其状态转移方程便是:
F[i,v] = max{F[i−1,v],F[i−1,v−Ci] + Wi}

我们可以做一点空间上的优化,用F[v]表示当前v空间所获得的最大价值,则F[v]=max(F[v],F[v-Ci]+W[i]);

这里要注意一个问题,空间优化时第二层循环一定要从V开始,因为如果从Ci开始的话,F[v]就可能由F[i,,v-Ci]推出,答案可能就会错

 1 #include<iostream>
 2 #include<string.h>
 3 #include<string>
 4 #include<sstream>
 5 #include<vector>
 6 #include<deque>
 7 #include<map>
 8 #include<algorithm>
 9 #include<iomanip>
10 #include<math.h>
11 #include<set>
12 using namespace std;
13
14 int maxn = 0x3f3f3f3f3f;
15 typedef long long ll;
16 typedef unsigned long long ull;
17
18 int dp[1005];
19 int val[1005], v[1005];
20 int main()
21 {
22     int t;
23     cin >> t;
24     int n,V;
25     while (t--)
26     {
27         cin >> n>>V;
28         for (int i = 1; i <= n; i++)
29             scanf_s("%d", &val[i]);
30         for (int i = 1; i <= n; i++)
31             scanf_s("%d", &v[i]);
32         memset(dp, 0, sizeof(dp));
33         for (int i = 1; i <= n; i++)
34         {
35             for (int j = V; j >=v[i]; j--)
36             {
37                 dp[j] = max(dp[j], dp[j - v[i]] + val[i]);
38             }
39         }
40         cout << dp[V] << endl;
41     }
42     return 0;
43 }

原文地址:https://www.cnblogs.com/QingFengDaHui/p/10472875.html

时间: 2024-11-09 09:40:33

hdu 2602(01背包)的相关文章

HDU 2602 (0-1背包)

Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 35815    Accepted Submission(s): 14753 Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bon

hdu 2602(01背包)

Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 46546    Accepted Submission(s): 19378 Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bon

poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)

题目链接: poj3211  hdu1171 这个题目比1711难处理的是字符串如何处理,所以我们要想办法,自然而然就要想到用结构体存储,所以最后将所有的衣服分组,然后将每组时间减半,看最多能装多少,最后求最大值,那么就很愉快的转化成了一个01背包问题了.... hdu1711是说两个得到的价值要尽可能的相等,所以还是把所有的价值分为两半,最后01背包,那么这个问题就得到了解决.. 题目: Washing Clothes Time Limit: 1000MS   Memory Limit: 13

Robberies hdu 2955 01背包

Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10933    Accepted Submission(s): 4049 Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that

hdu 1203 01背包 I need a offer

hdu 1203  01背包  I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offer的概率以及花费,给定money,求得到至少一份offer的最大概率. 简单的01背包 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 double

hdu 1864 01背包 最大报销额

http://acm.hdu.edu.cn/showproblem.php?pid=1864 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的选拔 最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 18562    Accepted Submission(s): 5459

HDU 2639 01背包求第k大

Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3718    Accepted Submission(s): 1903 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took par

HDU 2639 01背包(分解)

http://acm.hdu.edu.cn/showproblem.php?pid=2639 01背包第k优解,把每次的max分步列出来即可 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 struct Node 6 { 7 int price; 8 int val; 9 }node[1005]; 10 int main() 11 { 12 i

HDU 2126 01背包(求方案数)

Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1886    Accepted Submission(s): 699 Problem Description When the winter holiday comes, a lot of people will have a trip. Genera

HDU1171_Big Event in HDU【01背包】

Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24321    Accepted Submission(s): 8562 Problem Description Nowadays, we all know that Computer College is the biggest department