PTA裝箱問題

2022-10-09 04:30:13 字數 2728 閱讀 7472

一、題目描述

二、解題思路

這道題是乙個貪心的問題。不能想當然的直接按照面積直接裝,因為箱子是乙個整個的,不可以分開。

首先是6*6的箱子,你可以直接裝

然後是5*5的箱子,你在裝完乙個5*5之後,最多只能再裝11個1*1,是1*1盡量往這裡面裝。一直到5*5的箱子裝完

然後是4*4的箱子,裝完乙個4*4之後,我最多還能裝5個2*2的箱子,如果沒有5個2*2的箱子,那麼就盡量把1*1的箱子往這裡面放

然後是3*3的箱子,這個箱子的情況有點多

首先我們能用3*3盡量的裝滿乙個箱子,即a[3] / 4加入答案,然後讓a[3]%4,就是剩下的3*3的箱子了

第一種情況:如果還剩1個3*3的箱子,那麼我最多可以裝5個2*2的箱子,剩下的沒裝滿的盡量用1*1的裝滿

第二種情況:如果還剩2個3*3的箱子,那麼我最多可以裝3個2*2的箱子,剩下的沒裝滿的盡量用1*1的裝滿、

第三種情況:如果還剩3個3*3的箱子,那麼我最多可以裝1個2*2的箱子,剩下的沒裝滿的盡量用1*1的裝滿

然後是1*1的情況,直接+a[1] / 36,a[1] % 36,如果a[1]還有的話,就要花費乙個箱子去裝他。

三、**實現

1 #include "

bits/stdc++.h"2

#define pii pair3

#define rep(i,z,n) for(int i = z;i <= n; i++)

4#define per(i,n,z) for(int i = n;i >= z; i--)

5#define ll long long

6#define db double

7#define vi vector8

#define debug(x) cerr << "!!!" << x << endl;

9using

namespace

std;

10//

從某個串中把某個子串替換成另乙個子串

11string& replace_all(string& src, const

string& old_value, const

string&new_value)

17else

break;18

}19return

src;20}

21inline ll read()

2232

while(ch >= '

0' && ch <= '9'

)36return s *r;37}

38 inline void

write(ll x)

3944

int a[7

];45

intmain()

4660 a[5]--;61}

6263

//處理4的情況

64while(a[4] > 0

)71 sum = 20 - sum * 4;72

int sum1 = 0;73

while(a[1] > 0 && sum1

77 a[4]--;78}

7980

//處理3的情況

81 ans += a[3] / 4

;82 a[3] = a[3] % 4;83

if(a[3] == 1

)89 ans++;

90 sum = 27 - sum * 4;91

int sum1 = 0;92

while(a[1] > 0 && sum1

96 a[3] = 0;97

}98if(a[3] == 2

)104 ans++;

105 sum = 18 - sum * 4

;106

int sum1 = 0

;107

while(a[1] > 0 && sum1

111 a[3] = 0

;112

}113

if(a[3] == 3

)119 ans++;

120 sum = 9 - sum * 4

;121

int sum1 = 0

;122

while(a[1] > 0 && sum1

126 a[3] = 0

;127

}128

129 ans += a[2] / 9

;130 a[2] = a[2] % 9

;131

if(a[2

])139

}140

141 ans += a[1] / 36

;142 a[1] = a[1] % 36

;143

if(a[1

])144 ans++;

145 cout << ans <

146}

147return0;

148 }

PTA 裝箱問題

假設有n項物品,大小分別為s 1 s2 s i s n,其中s i為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及...

PTA 裝箱問題(C C 都有)

假設有n項物品,大小分別為s1 s2 si sn 其中si 為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及放置全...

PTA 裝箱問題 20分 貪心

假設有n項物品,大小分別為s 1 s 2 s i s n 其中s i 為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,...