解题思路:
使用Vec
搭配BTreeSet
,Vecm
中存储的是所有的砝码的枚举,BTreeSet set
中存储的是所有不重复的质量加和方案。
use std::io;
use std::collections::BTreeSet;
fn main() {
let mut s = String::new();
io::stdin().read_line(&mut s).expect("Failed to read line");
let _n = s.trim().parse::<u32>().unwrap_or(1);
s.clear();
io::stdin().read_line(&mut s).expect("Failed to read line");
let mut v = Vec::with_capacity(10);
for i in s.trim().split(" ") {
v.push(i.trim().parse::<u32>().unwrap());
}
s.clear();
io::stdin().read_line(&mut s).expect("Failed to read line");
let mut m = vec![];
let mut j = 0;
for i in s.trim().split(" ") {
for _i in 0..(i.trim().parse::<usize>().unwrap()) {
m.push(v[j]);
}
j += 1;
}
let mut set:BTreeSet<u32> = BTreeSet::new();
set.insert(0);
for i in 0..m.len() {
let s = BTreeSet::from(set.clone());
for j in s.iter() {
set.insert(*j + m[i]);
}
}
println!("{}",set.len());
}