zoukankan      html  css  js  c++  java
  • [HDOJ2639]Bone Collector II(第k优01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639

    题意:求01背包的第k优解

    dp(i, j)表示容量为j时的i优解

    对于第二维的操作和01背包几乎一样,只是我们只需要关注每一次取的前k大个即可。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 const int maxn = 1010;
    23 int n, m, k;
    24 int v[maxn], w[maxn];
    25 int dp[maxn][maxn];
    26 int d[maxn];
    27 
    28 int main() {
    29     freopen("in", "r", stdin);
    30     int T;
    31     scanf("%d", &T);
    32     while(T--) {
    33         scanf("%d%d%d", &n, &m, &k);
    34         for(int i = 0; i < n; i++) {
    35             scanf("%d", &v[i]);
    36         }
    37         for(int i = 0; i < n; i++) {
    38             scanf("%d", &w[i]);
    39         }
    40         memset(dp, 0, sizeof(dp));
    41         for(int i = 0; i < n; i++) {
    42             for(int j = m; j >= w[i]; j--) {
    43                 int cnt = 0;
    44                 for(int p = 1; p <= k; p++) {
    45                     d[cnt++] = dp[p][j];
    46                     if(j - w[i] >= 0) {
    47                         d[cnt++] = dp[p][j-w[i]] + v[i];
    48                     }
    49                 }
    50                 sort(d, d+cnt, greater<int>());
    51                 cnt = unique(d, d+cnt) - d;
    52                 int q = 1;
    53                 for(int p = 0; p < cnt; p++) {
    54                     dp[q++][j] = d[p];
    55                 }
    56             }
    57         }
    58         printf("%d
    ", dp[k][m]);
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    Solr4.8.0源码分析(12)之Lucene的索引文件(5)
    JAVA基础(1)之hashCode()
    Solr4.8.0源码分析(11)之Lucene的索引文件(4)
    检查数据不一致脚本
    索引的新理解
    数据库放到容器里
    动态规划
    每天晚上一个动态规划
    postgresql parallel join example
    名不正,则言不顺
  • 原文地址:https://www.cnblogs.com/kirai/p/5440075.html
Copyright © 2011-2022 走看看