• 装箱I(01背包)


    描述

    给两个有一定容量的箱子,往里面装宝石(宝石总容量不能超过箱子容量),不同的宝石有不同的容量和价值。求两个箱子里最大宝石的价值。

    输入

    line 1: Input n;  n:表示宝石数量    1<n<100
    line 2: Input C1,C2;   C1:第一个箱子的容量  C2:第二个箱子的容量  1<C1,c2<100
    line 3~n+3-1: Ci,Vi   Ci:宝石容量  Vi:宝石价值 
    计算后的算有数据都在2^31内.

    输出

    两个箱子里的宝石的最大价值。

    样例输入

    4
    10 20
    5 20
    11 15
    6 8
    8 9
    6
    10 20
    6 8
    4 15
    8 9
    4 16
    15 20
    3 15

    样例输出

    44
    66

    题目分析:

    01背包,多开一维。

    #include <bits/stdc++.h>
    using namespace std;
    int dp[105][105],w[105],v[105];
    int main()
    {
        int n,c1,c2;
        while(~scanf("%d",&n))
        {
            memset(dp,0,sizeof dp);
            scanf("%d%d",&c1,&c2);
            for(int i=1;i<=n;i++)
                scanf("%d%d",&w[i],&v[i]);
            for(int i=1;i<=n;i++)
                for(int j=c1;j>=0;j--)
                    for(int k=c2;k>=0;k--)
                    {
                        if(j>=w[i]) dp[j][k]=max(dp[j][k],dp[j-w[i]][k]+v[i]);
                        if(k>=w[i]) dp[j][k]=max(dp[j][k],dp[j][k-w[i]]+v[i]);
                    }
            printf("%d
    ",dp[c1][c2]);
        }
        return 0;
    }
  • 相关阅读:
    Linux安装telnet
    linux 打压缩包
    JAVA读写文件
    LINUX安装NGINX
    Linux安装JDK
    java判断字符串中是否包含中文 过滤中文
    操作MySQL
    Java序列化对象-字符串转换
    nginx
    linux操作命令
  • 原文地址:https://www.cnblogs.com/zdragon1104/p/9499655.html
Copyright © 2020-2023  润新知