zoukankan      html  css  js  c++  java
  • 南阳106--背包问题

    背包问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
     
    输入
    第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
    随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。
    输出
    输出每组测试数据中背包内的物品的价值和,每次输出占一行。
    样例输入
    1
    3 15
    5 10
    2 8
    3 9
    
    样例输出
    65
    来源
    [苗栋栋]原创
    上传者
    苗栋栋
     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 struct ac 
     6 {
     7     int a, b;
     8 } num[15];
     9 
    10 bool cmp(ac a, ac b)
    11 {
    12     return a.a > b.a;
    13  } 
    14  
    15 int main()
    16 {
    17     int t;
    18     scanf("%d", &t);
    19     while(t--)
    20     {
    21         int n, m;
    22         scanf("%d %d", &n, &m);
    23         for(int i=0; i<n; i++)
    24             scanf("%d %d", &num[i].a, &num[i].b);
    25         sort(num, num+n, cmp);
    26         int sum = 0, total = 0;
    27         for(int i=0; i<m; i++)
    28         {
    29             sum += num[i].b; total += num[i].a*num[i].b;
    30             //printf("%d %d
    ", sum, total);
    31             if(sum > m) 
    32             {
    33                 total -= (sum - m) * num[i].a;
    34                 break;
    35             }
    36             if(sum == m)
    37                 break;
    38         }
    39         printf("%d
    ", total);
    40     }
    41     return 0;
    42 } 
  • 相关阅读:
    Java 初始化
    tomcat 输入学习
    使用exundelete在Linux下恢复删除的文件
    java设计模式----解释器模式
    java设计模式----中介模式
    java设计模式----访问者模式
    java设计模式----状态模式
    关于前后端分离的一些事
    sublime text3
    java中的socket编程
  • 原文地址:https://www.cnblogs.com/soTired/p/4693366.html
Copyright © 2011-2022 走看看