• 逃亡的准备


     

    【问题描述】

    在《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<cstdio>
    #define N 510
    long long dp[N]={0};
    int sc[N*4],wc[N*4],s0[N*4],w0[N*4],m0[N*4],n,v,n0=0,nc=0;
    
    int main()
    {
        int i,j,k,m,w,s;
        scanf("%d%d",&n,&v);
        for(i=1;i<=n;i++)
           {
              scanf("%d%d%d",&m,&w,&s); 
              if(m*w>=v)//判断是否可以为完全背包解决 
                {
                   nc++;
                   wc[nc]=w;
                   sc[nc]=s;
                }
              if(m*w<v)//判断是否可以为0/1背包解决 
               {
                  n0++;
                  w0[n0]=w;
                  s0[n0]=s;
                  m0[n0]=m;
                }
           }
         for(i=1;i<=n0;i++)//解决0/1背包的部分 
           for(k=1;k<=m0[i];k++)
             for(j=v;j>=w0[i];j--)
               if(dp[j]<dp[j-w0[i]]+s0[i])
                  dp[j]=dp[j-w0[i]]+s0[i];
          for(i=1;i<=nc;i++)//解决完全背包的部分 
            for(j=wc[i];j<=v;j++)
                 if(dp[j]<dp[j-wc[i]]+sc[i])
                   dp[j]=dp[j-wc[i]]+sc[i];
         printf("%ld",dp[v]);
       }
     
    背包
  • 相关阅读:
    [LeetCode] 278. First Bad Version 第一个坏版本
    [LeetCode] 119. Pascal's Triangle II 杨辉三角 II
    [LeetCode] 118. Pascal's Triangle 杨辉三角
    [LeetCode] 272. Closest Binary Search Tree Value II 最近的二叉搜索树的值 II
    校验数组中是否存在某一个元素
    css sprites 图片位置计算
    后台获取当前客户端浏览器的类型
    Linq,拉姆达表达式注意!
    window.open 设置高和宽无效
    asp:FileUpload 控件上传多文件
  • 原文地址:https://www.cnblogs.com/sjymj/p/5933031.html
Copyright © 2020-2023  润新知