zoukankan      html  css  js  c++  java
  • HDU-2602 Bone Collector——01背包

    首先输入一个数字代表有n个样例 

    接下来的三行

    第一行输入n  和  v,代表n块骨头,背包体积容量为v。

    第二行输入n块骨头的价值

    第三行输入n块骨头的体积

    问可获得最大的价值为多少

    核心:关键在于dp【j】=max(dp[j],dp[j-w[i]]+v[i]) 的状态转移!!

    背包最多能装下题目中所给的骨头,如体积为10的背包能装下体积分别为5和4的体积一块,

    但最后其实背包还剩余了体积为1的位置没有讨论,则通过 j-- 进行剩余补充讨论。

    在体积不断减小的同事每次都对目前这个这个体积(目前状态)下最多能装多少已知的骨头,

    并通过对比之前的数据(上一次的状态)取较大值。即可获得该目标体积的最大值!!

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    #include <stdio.h>
    #define ll long long
    using namespace std;
    int a[1005];
    int b[1005];
    int dp[1005];
    int main()
    {
        int m,n,k,t;
        cin>>t;
        while(t--)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(dp,0,sizeof(dp));
            cin>>m>>n;
            for(int i=1;i<=m;i++)
            {
                cin>>a[i];
            }//价值
            for(int i=1;i<=m;i++)
            {
                cin>>b[i];
            }//体积
            for(int i=1;i<=m;i++)
            {
                for(int j=n;j>=0;j--)
                {
                    if(j>=b[i])
                        dp[j] = max(dp[j],dp[j-b[i]]+a[i]);
                }
            }
            cout<<dp[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    需求的有序化和方案的系统化
    产品 增长 口碑传播
    私域流量的价值 大悦城微信营销:14万微信会员哪来的
    产品创新阶段关口细则
    业务关键数据指标
    TOB 增长
    医美品零售门店分析
    数据赋能饮品轻食
    [已读]你不知道的JavaScript(上卷)
    [已读]移动web手册
  • 原文地址:https://www.cnblogs.com/tonyyy/p/10436636.html
Copyright © 2011-2022 走看看