解题思路:
1.获取每个商品的单价
2.按照单价排序
3.先满足单价最高的,依次递减。直到需要的数量被填满,或者所有商品的库存为0
package main
import (
"fmt"
"sort"
)
type Product struct {
stock float64
price float64
average float64
}
type Products []Product
func (p Products) Len() int {
return len(p)
}
func (p Products) Less(i, j int) bool {
return p[i].average > p[j].average
}
func (p Products) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
func main() {
var n, d int
var p Products
_, _ = fmt.Scanf("%d %d", &n, &d)
p = make(Products, n)
for i:=0; i<n; i++ {
_, _ = fmt.Scanf("%f", &p[i].stock)
}
for i:=0; i<n; i++ {
_, _ = fmt.Scanf("%f", &p[i].price)
p[i].average = p[i].price / p[i].stock
}
sort.Sort(p)
j := 0
sum := 0.0
for d > 0 && j < n {
if d >= int(p[j].stock) {
d = d - int(p[j].stock)
sum += p[j].price
} else {
sum += p[j].average * float64(d)
d = 0
}
j++
}
fmt.Printf("%.2f", sum)
}
这里用go实现,简单来说就是获取输入,用一个结构体来存储库存,价格,单价,然后按照单价排序。下一步是关键,一个循环,直到需求为0或者所有的商品库存为0