zoukankan      html  css  js  c++  java
  • 0/1背包问题(DP)

    Description

    给定 个物品和一个背包。物品 的重量是 w,其价值为 v,背包的容量为 。问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?

    Input

    输入的第一行为测试样例的个数 ,接下来有 个测试样例。

    每个测试样例的第一行是物品个数 n(1 ≤ n ≤ 3500)和背包容量 CC ≤ 13000),接下来 行,每行两个正整数 w和 v( wi ≤ 1000,  vi ≤ 1000 ),分别表示第 件物品的重量 w及其价值 v

    Output

    对应每个测试样例输出一行,只有一个整数,表示总价值的最大值。

    Sample Input

    2
    1 2
    1 1
    2 3
    2 3
    2 4

    Sample Output

    1
    4

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define NUM 3502
    #define CAP 13002
    int w[NUM],v[NUM];
    int dp[CAP];
    /*
    0-1背包
    */
    int pack(int C,int sum){
        memset(dp,0,sizeof(dp));
        for(int i=0;i<sum;i++)
            for(int j=C;j>=w[i];j--)
                dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
        return dp[C];
    }
    int main()
    {
        int T,n,C;
        cin >> T;
        for(int i=1;i<=T;i++)
        {
            memset(dp, 0, sizeof(dp));
            cin >> n >> C;
            for(int i=0; i<n; i++){
                cin >> w[i] >> v[i];
            }
            cout << pack(C,n)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    laravel 表单接收
    Ubuntu查找通过apt命令已安装软件
    Centos7.2源码编译安装LA(N)MP
    文件和目录权限
    第六天 软件安装和管理
    第五天用户和组群账户管理
    第四天 文件和目录操作
    第三天 目录和文件
    第二天 linux命令
    oracle数据库学习第一天
  • 原文地址:https://www.cnblogs.com/dichuan/p/8243019.html
Copyright © 2011-2022 走看看