• C语言 · 礼物盒


    礼物盒

    分值: 20

    小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图。

    小y 还有 36 个礼物盒,他们的深度都为 1cm。

    他们对应的宽度和高度如下,单位(cm)。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    11 3

    8 12

    11 17

    16 13

    1 14

    2 8

    6 10

    10 18

    17 11

    10 15

    6 14

    5 6

    2 19

    19 10

    4 9

    7 9

    5 14

    5 20

    15 19

    3 17

    15 11

    7 25

    11 20

    9 12

    17 4

    9 19

    4 18

    10 10

    12 19

    17 3

    19 9

    20 16

    11 16

    10 2

    20 15

    3 14

    1

    2

    3

    4

    5

    6

    7

    8

    #include <stdio.h>

    int main() {

        printf("%d ",

        // 在下方填入答案

       

        );

        return 0;

    }

    作者注释:本题可用贪心做,但不会使,递归整了如下。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int kuan[36];
     4 void paixu(int b[]){
     5     for(int i=0;i<36-1;i++){
     6         for(int j=0;j<36-1-i;j++){
     7             if(b[j]>b[j+1]){
     8                 int t = b[j];
     9                 b[j] = b[j+1];
    10                 b[j+1] = t;
    11             }
    12         }
    13     }
    14 }
    15 void dfs(int begin,int sum,int ans){
    16     if(sum==100){
    17         printf("%d",ans);
    18         exit(0);//结束程序 
    19     }
    20     for(int i=begin; i<35; i++){
    21         dfs(i+1,sum+kuan[i],ans+1);
    22     }
    23 }
    24 int main(){
    25     int a[36],gao[36];
    26     int ans, n;
    27     for(int i=0;i<36;i++){
    28         scanf("%d%d",&kuan[i],&gao[i]);
    29     }
    30     paixu(kuan);
    31     dfs(0,0,0);
    32     return 0;
    33 }
    34 /*
    35 11 3
    36 8 12
    37 11 17
    38 16 13
    39 1 14
    40 2 8
    41 6 10
    42 10 18
    43 17 11
    44 10 15
    45 6 14
    46 5 6
    47 2 19
    48 19 10
    49 4 9
    50 7 9
    51 5 14
    52 5 20
    53 15 19
    54 3 17
    55 15 11
    56 7 25
    57 11 20
    58 9 12
    59 17 4
    60 9 19
    61 4 18
    62 10 10
    63 12 19
    64 17 3
    65 19 9
    66 20 16
    67 11 16
    68 10 2
    69 20 15
    70 3 14
    71 */

     转载的贪心代码,转载自:http://blog.csdn.net/a568283992/article/details/68948366

     1 #include <stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 #include<string.h>
     5 int widths[] = {11,8,11,16,1,2,6,10,17,10,6,5,2,19,4,
     6             7,5,5,15,3,15,11,9,17,9,4,10,12,17,19,20,11,10,20,3};
     7 int p[20];
     8 void dfs(int n,int sum,int step){
     9     if(sum==100){
    10         int s = 0;
    11         for(int i = 0;i<20;i++){
    12             if(p[i]>0)s++;
    13         }
    14         printf("%d
    ",s);
    15         exit(0);
    16     }else if(sum>100)return;
    17 
    18     for(int i = n;i<35;i++){
    19         p[step] = widths[n];
    20         dfs(i+1,sum+widths[n],step+1);
    21         p[step] = 0;
    22     }
    23 }
    24 int main() {
    25 
    26     sort(widths,widths+35);
    27     dfs(0,0,0);
    28     return 0;
    29 }
  • 相关阅读:
    2013第47周日整理
    2013第47周六笔记本散热及相关问题思考
    myeclipse中控制台日志比实际晚8小时解决方法及java日志处理
    2013第47周五抱怨负能量
    ORM框架
    什么是IT
    内网port映射具体解释(花生壳)
    DrawText的使用
    socket编程原理
    hibernate学习——Set集合配置
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6666147.html
Copyright © 2020-2023  润新知