zoukankan      html  css  js  c++  java
  • 背包问题

    贪心
    描述
    现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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<stdio.h>
     2 typedef struct value
     3 {
     4     int v;/*价值*/
     5     int w;/*重量*/
     6 }thing;
     7 int main()
     8 {
     9     int n;
    10     scanf("%d",&n);
    11     while(n--)
    12     {   
    13         int s,m,j,i=0,sumv=0,sumw=0;
    14         scanf("%d%d",&s,&m);
    15         thing a[s],t;
    16         while(i!=s)
    17         {
    18             scanf("%d%d",&a[i].v,&a[i].w);
    19             i++;
    20         } 
    21         for(i=0;i<s-1;i++)
    22             for(j=i;j<s;j++)
    23             {
    24                 if(a[i].v<a[j].v)
    25                 {
    26                     t=a[i];
    27                     a[i]=a[j];
    28                     a[j]=t;
    29                 }
    30             }
    31         int ww=0,vv=0;
    32         i=0;
    33         while(sumw<m)
    34         {
    35             ww=sumw;
    36             vv=sumv;
    37             sumw=sumw+a[i].w;
    38             sumv=sumv+a[i].w * a[i].v;
    39             i++;
    40             while(i==s)
    41                 break;
    42         }
    43         if(sumv>m)
    44               sumv=vv+(m-ww)*a[i-1].v;
    45         printf("%d
    ",sumv);
    46     }
    47 }
  • 相关阅读:
    BPF and eBPF linux
    o-sync-and-o-direct
    linux performance test
    iostat
    MYSQL IO innodb-buffer-pool
    MYSQL file types redo log
    read pread write pwrite open
    CORE DUMP
    linux kernel的中断子系统 softirq
    linux KERNEL 问题
  • 原文地址:https://www.cnblogs.com/a1225234/p/4455607.html
Copyright © 2011-2022 走看看