一、題目描述
二、解題思路
這道題是乙個貪心的問題。不能想當然的直接按照面積直接裝,因為箱子是乙個整個的,不可以分開。
首先是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 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,...