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 }
原文地址:https://www.cnblogs.com/panweiwei/p/6666147.html