zoukankan      html  css  js  c++  java
  • 逃亡的准备

    逃亡的准备

    (hallows.pas/c/cpp)

     

    【问题描述】

    在《Harry Potter and the Deathly Hallows》中,Harry Potter他们一起逃亡,现在有许多的东西要放到赫敏的包里面,但是包的大小有限,所以我们只能够在里面放入非常重要的物品,现在给出该种物品的数量、体积、价值的数值,希望你能够算出怎样能使背包的价值最大的组合方式,并且输出这个数值,赫敏会非常地感谢你。

    【输入文件】(hallows.in)

    (1)第一行有2个整数,物品种数n和背包装载体积v。

    (2)2行到n+1行每行3个整数,为第i种物品的数量m、体积w、价值s。.

         

    【输出文件】(hallows.out)

          输出文件hallows.out仅包含一个整数,即为能拿到的最大的物品价值总和。

    【输入样例】                                    

    2 10                           

    3 4 3

    2 2 5

    【输出样例】

    13

    【注释】

    选第一种一个,第二种两个。

    结果为3*1+5*2=13

    【数据规模】

    对于30%的数据

    1<=v<=500

    1<=n<=2000

    1<=m<=10

    1<=w<=20

    1<=s<=100

     

    对于100%的数据

    1<=v<=500

    1<=n<=2000

    1<=m<=5000

    1<=w<=20

    1<=s<=100

    一开始用多重背包做,但一直爆零 最后就弃坑啦

    #include <iostream>  
    #include <string.h>  
    #include <stdio.h>  
    using namespace std;  
    const int N = 1010;  
    int dp[N];  
    int w[N],s[N],num[N];  
    int n,V;
    int main()
    {
        freopen("hallow3.in","r",stdin);
        freopen("hallow.out","w",stdout);
        scanf("%d%d",&n,&V);
        for(int i=1; i<=n; i++)
            scanf("%d%d%d",&num[i],&w[i],&s[i]);
        memset(dp,0,sizeof(dp));
        for(int i=1; i<=n; i++)
        {
            if(num[i]*w[i]>V)
              for(int j=w[i];j<=V;j++)
                dp[j]=max(dp[j],dp[j-w[j]]+s[i]);
            else
            {
                int k = 1;
                while(k < num[i])
                {
                    for(int j=V;j>=k*w[i];j--)
                      dp[j]=max(dp[j],dp[j-k*w[i]]+k*s[i]);
                    num[i] -= k;
                    k <<= 1;
                }
                for(int j=V;j>=num[i]*w[i];j--)
                  dp[j]=max(dp[j],dp[j-num[i]*w[i]]+num[i]*s[i]);
            }
        }
        printf("%d",dp[V]);
        return 0;
    }  
  • 相关阅读:
    数30的小程序
    convert curl command into java HttpGet
    优秀技术文章转载备份 --- 变速原理
    用 c 调用 win-api 实现自动点击c# winform 程序 的按钮
    win 10 安装 glew 方法
    《想到什么更新什么系列》processing 性能优化
    processing 根据物体移动方向改变朝向
    openFrameworks 无法生成exe已经找不到dll的解决方案
    UE4 无法打开源文件“file_name.generated.h”(Cannot open source file name.generated.h)
    UE4 重新编译老版本的插件
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5933024.html
Copyright © 2011-2022 走看看