此问题可以通过动态规划解决。我们可以用一个数组来记录达到每个体积时的最大物质含量,然后逐步构建解。
package main
import (
"fmt"
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
fmt.Print("请输入溶液种类数量n:")
var n int
fmt.Scan(&n)
fmt.Print("请输入化学反应增加单位x:")
var x int
fmt.Scan(&x)
fmt.Print("请输入需要达到的体积c:")
var c int
fmt.Scan(&c)
v := make([]int, n)
w := make([]int, n)
fmt.Println("现在请依次输入每种溶液的体积和物质含量:")
for i := 0; i < n; i++ {
fmt.Printf("请输入第%d种溶液的体积v[%d]:", i+1, i)
fmt.Scan(&v[i])
fmt.Printf("请输入第%d种溶液的物质含量w[%d]:", i+1, i)
fmt.Scan(&w[i])
}
// dp数组,用于存储每个体积的最大物质含量
dp := make([]int, c+1)
// 遍历每种溶液
for i := 0; i < n; i++ {
// 更新每个体积的物质含量
for j := v[i]; j <= c; j++ {
dp[j] = max(dp[j], dp[j-v[i]]+w[i])
}
}
// 计算同体积合并后的物质含量
for i := 1; i <= c; i++ {
dp[i] = max(dp[i], dp[i-1]+x)
}
fmt.Println("物质含量最多是:", dp[c])
}
可以通过控制台输入参数,首先输入溶液的种类数、化学反应增加的物质含量和所需的体积。然后输入每种溶液的体积和物质含量。最后程序会输出达到所需体积时的最大物质含量。... 展开详请
你是对的。 在QuickSelect之后的下一个候选人中,十进制占优:n / 10,2 * n / 10..9 * n / 10,因此只检查n / 10索引是不够的 请注意,显性占用在有序数组中长期运行,并且当然至少有一个具有提及索引的元素属于该运行。 例如k = 3,N = 11。让元素b占据至少1/3的数组。在这种情况下,排序数组可能看起来像 b b b b * * * * * * *
* b b b b * * * * * *
* * b b b b * * * * *
* * * b b b b * * * *
* * * * b b b b * * *
* * * * * b b b b * *
* * * * * b b b b * *
* * * * * * b b b b *
* * * * * * * b b b b
^ ^ //positions for quickselect
... 展开详请