ログインしてください。
A - 梱包できるかな? 解説
by
blueberry1001
問題文中に彼はとても几帳面な性格なので、荷物を全て同じ向きで梱包します。とあります。つまり、荷物をどんな向きで梱包するかを全探索すればよいです。斜めに梱包することは許可されていないため、\((荷物のAに平行な辺の長さ、Bに平行な辺の長さ、Cに平行な辺の長さ)\) は\((P,Q,R),(P,R,Q),(Q,P,R),(Q,R,P),(R,P,Q),(R,Q,P)\) の \(6\) 通りあります。 \(6\) 通りを全探索しましょう。実装の際は順列全探索をすると楽に実装できます。
梱包する向きが決まったら、それぞれの辺ごとに何個の荷物が梱包できるかを考え、それを \(3\) 方向についてかければよいです。詳細は実装例を参考にしてください。
#include<bits/stdc++.h>
using namespace std;
int main(){
//扱いやすいように、箱と荷物のサイズは配列で受け取る。
vector<int>box(3),nimotsu(3);
for(int i=0;i<3;i++)cin >> box[i];
for(int i=0;i<3;i++)cin >> nimotsu[i];
//順列全探索するためにソートする。
sort(nimotsu.begin(),nimotsu.end());
int ans = 0;
do{
int cnt = 1;
for(int i = 0;i<3;i++){
cnt *= box[i]/nimotsu[i];
}
ans = max(ans,cnt);
}while(next_permutation(nimotsu.begin(),nimotsu.end()));
cout << ans << endl;
}
投稿日時:
最終更新:
