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     int T;
13     scanf("%d",&T);
14     while(T--)
15     {
16         int n,v,k,i,dp[1005][31]={0},a[31],b[31];
17         scanf("%d%d%d",&n,&v,&k);
18         for(i=0;i<n;i++)
19             scanf("%d",&node[i].price);
20         for(i=0;i<n;i++)
21             scanf("%d",&node[i].val);
22         int j;
23         for(i=0;i<n;i++)
24         {
25             for(j=v;j>=node[i].val;j--)
26             {
27                 int d;
28                 for(d=1;d<=k;d++) //每次max分别存入a[]和b[],最后比较相应的次数
29                 {
30                     a[d]=dp[j-node[i].val][d]+node[i].price;
31                     b[d]=dp[j][d];
32                 }
33                 int x,y,z;
34                 x=y=z=1;
35                 a[d]=b[d]=-1;
36                 while(z<=k&&(x<=k||y<=k))
37                 {
38                     if(a[x]>b[y])
39                     {
40                         dp[j][z]=a[x];
41                         x++;
42                     }
43                     else
44                     {
45                         dp[j][z]=b[y];
46                         y++;
47                     }
48                     if(dp[j][z]!=dp[j][z-1])
49                         z++;
50                 }
51             }
52         }
53         printf("%d\n",dp[v][k]);
54     }
55     return 0;
56 }
时间: 2024-10-06 01:53:00

HDU 2639 01背包(分解)的相关文章

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

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 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

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

[HDOJ1171]Big Event in HDU(01背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 许多有价值的物品,有重复.问如何将他们分成两堆,使两堆价值之差最小. 对价值求和,转换成01背包,做一次,相当于一堆选物品使得最接近一半.然后这个结果和用价值和作差的结果就是两堆的价值,此时价值只差最小. 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <c