zoukankan      html  css  js  c++  java
  • 动态规划:01背包 复习

    记忆化搜索与动态规划

    题目:n个重量和价值分别为 wi, vi的物品。从这些物品中挑选出总重量不超过W的物品。求所有挑选方案中价值总和的最大值。

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 10000 + 50;
    int n, W;
    int w[maxn], v[maxn];
    int dp[maxn][maxn];
    
    /*
    4
    2 3 1 2 3 4 2 2
    5
    */
    
    void solve()
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j <= W; j++) 
            {
                //无法挑选这个商品 
                if (j < w[i]) {
                    dp[i + 1][j] = dp[i][j];    
                }
                //挑选和不挑选都尝试一下 
                else {
                    dp[i + 1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i]);
                }
            }
        }
        cout << dp[n][W] << endl;
        
    }
    
    
    int main()
    {
        cin >> n;
        for (int i = 0; i < n; i++)
        {
            cin >> w[i] >> v[i];
        }
        cin >> W;
        
        memset(dp, 0, sizeof(dp));
        solve();
        
        return 0;
    }
  • 相关阅读:
    投资数据来源
    白酒
    医药
    农林牧渔
    软件IT
    基建
    ajax验证用户名 当用户名框的数据改变时 执行ajax方法
    jQuery load() 方法
    js各种验证文本框输入格式
    JAVASCRIPT技术 表达式验证
  • 原文地址:https://www.cnblogs.com/douzujun/p/8520178.html
Copyright © 2011-2022 走看看