SwiftでAtCoder Beginner Contest 229の[C - Cheese]を解きました。
問題内容
問題文
ピザ屋で働く高橋くんは、まかないとして美味しいチーズピザを作ることにしました。
今、高橋くんの目の前に N 種類のチーズがあります。
i 種類目のチーズは 1 [g] あたりのおいしさが Aiで、Bi[g] あります。
ピザのおいしさは、ピザに乗せたチーズのおいしさの総和で決まります。
但し、チーズを使いすぎると怒られてしまうため、乗せたチーズの重さは合計で W [g] 以下である必要があります。
この条件のもとで、可能なピザのおいしさの最大値を求めてください。
解答コード
func abc229C(){
var aa = readLine()!.split(separator:" ").map{Int($0)!}
let n = aa[0]
var w = aa[1]
var result = 0
var array : [[Int]] = []
for _ in 0..<n { array.append(readLine()!.split(separator:" ").map{Int($0)!}) }
array.sort{$0[0] > $1[0]}
while w > 0{
for i in 0..<n {
if array[i][1] <= w{
result += array[i][0] * array[i][1]
w -= array[i][1]
}
else{
result += array[i][0] * w
w = 0
}
}
break
}
print(result)
}
abc229C()
AとBの配列の配列、二次元配列を作って、A(1gあたりのおいしさ)が大きい順に並び替えを行います。
あとは重さのキャパが0になるまでチーズの重さを追加していきます。
追加する際にはBをすべて使えるか、一部しか使えないかで振り分けしています。
Swiftのお役立ち情報