zoukankan      html  css  js  c++  java
  • poj 3624 01背包

    Description

    Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).

    Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.

    Input

    * Line 1: Two space-separated integers: N and M
    * Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di

    Output

    * Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints

    Sample Input

    4 6
    1 4
    2 6
    3 12
    2 7

    Sample Output

    23

    Source

    dp[i][j]代表当背包体积为j时,前i件物品可以达到的最大价值。

    当i为0时,前0件物品价值只能是0。所以第一行全是0;当第i件物品重量大于j时,dp[i][j] = dp[i - 1][j],否则dp[i][j] = max(dp[i - 1][j],

    dp[i - 1][j - w[i] ] + v[i])。

    为了优化内存,可以使用一维数组,但是j要从M递减到1,否则从1到M的话前面的会覆盖掉后面要用到的值。

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 vector<int> dp;
     7 
     8 int main() {
     9     int N, M, i, j;
    10     cin >> N >> M;
    11     vector<int> W(N + 1), D(N + 1);
    12     for (i = 1; i <= N; i++)
    13         cin >> W[i] >> D[i];
    14     dp.resize(M + 1);
    15     for (i = 1; i <= N; i++) {
    16         for (j = M; j >= 1; j--) {
    17             if (W[i] <= j)
    18                 dp[j] = max(dp[j], dp[j - W[i]] + D[i]);
    19         }
    20     }
    21     cout << dp[M] << endl;
    22     return 0;
    23 }
  • 相关阅读:
    require.js使用
    favico是针对网页图标内容更改
    web图片转换小工具制作
    控制显示input隐藏和查看密码
    程序员图片注释字符串制作工具
    c语言基础, , ,
    【理解】column must appear in the GROUP BY clause or be used in an aggregate function
    ps aux命令解析
    while(std::cin>>val)怎么结束的思考
    【转】NativeScript的工作原理:用JavaScript调用原生API实现跨平台
  • 原文地址:https://www.cnblogs.com/lxc1910/p/10549874.html
Copyright © 2011-2022 走看看