禮物盒spa
分值: 20.net
小y 有一個寬度爲 100cm,高度爲 20cm,深度爲 1cm 的櫃子,以下圖。code
小y 還有 36 個禮物盒,他們的深度都爲 1cm。blog
他們對應的寬度和高度以下,單位(cm)。遞歸
1ci 2string 3it 4io 5table 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\n", // 在下方填入答案
); 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\n",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 }