长春城投建设投资有限公司网站辽宁网站建设价位
2026/5/21 16:52:33 网站建设 项目流程
长春城投建设投资有限公司网站,辽宁网站建设价位,网站是怎么建成的,邢台wap网站建设报价称砝码 华为OD机试 - 华为OD上机考试 100分题型 华为OD机试真题目录点击查看: 华为OD机试真题题库目录#xff5c;机考题库 算法考点详解 题目描述 现有n种砝码#xff0c;重量互不相等#xff0c;分别为 m1,m2,m3…mn #xff1b; 每种砝码对应的数量为 x1,x2,x3…xn …称砝码华为OD机试 - 华为OD上机考试 100分题型华为OD机试真题目录点击查看: 华为OD机试真题题库目录机考题库 算法考点详解题目描述现有n种砝码重量互不相等分别为 m1,m2,m3…mn 每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧)问能称出多少种不同的重量。输入描述对于每组测试数据第一行n — 砝码的种数(范围[1,10])第二行m1 m2 m3 … mn — 每种砝码的重量(范围[1,2000])第三行x1 x2 x3 … xn — 每种砝码对应的数量(范围[1,10])备注数据范围每组输入数据满足1 ≤ n ≤ 101 ≤ mi ≤ 20001 ≤ xi ≤ 10输出描述利用给定的砝码可以称出的不同的重量数用例1输入2 1 2 2 1输出5说明可以表示出01234五种重量。题解一思路很容易想到newWeight oldWeight weight[i]每次循环时只需要用已有的重量再加上新的砝码重量值即可。使用set集合去重每次用放置新砝码时用集合中已有重量 weight[i]即可得到的结果继续放入集合中待下次放置时使用。最终集合的大小便是结果。c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includelist #includequeue #includeset using namespace std; int main() { int n; cin n; vectorint weight(n); vectorint nums(n); for (int i 0; i n; i) { cin weight[i]; } for (int i 0; i n; i) { cin nums[i]; } // 去重 setint s; s.insert(0); for (int i 0; i n; i) { for (int j 0; j nums[i]; j) { setints1(s.begin(), s.end()); // 枚举 for (int x : s1) { s.insert(x weight[i]); } } } cout s.size(); return 0; }JAVAimport java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); int[] weight new int[n]; int[] nums new int[n]; for (int i 0; i n; i) { weight[i] scanner.nextInt(); } for (int i 0; i n; i) { nums[i] scanner.nextInt(); } scanner.close(); // 用 HashSet 进行去重 SetInteger s new HashSet(); s.add(0); for (int i 0; i n; i) { for (int j 0; j nums[i]; j) { ListInteger tempList new ArrayList(s); ListInteger newElements new ArrayList(); for (int x : tempList) { newElements.add(x weight[i]); } s.addAll(newElements); } } System.out.println(s.size()); } }Pythonimportsys# 读取输入nint(sys.stdin.readline().strip())weightlist(map(int,sys.stdin.readline().split()))numslist(map(int,sys.stdin.readline().split()))# 使用 set 进行去重s{0}foriinrange(n):for_inrange(nums[i]):temp_listlist(s)new_elements[xweight[i]forxintemp_list]s.update(new_elements)print(len(s))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letinput[];rl.on(line,(line){input.push(line.trim());if(input.length3){letnparseInt(input[0]);letweightinput[1].split( ).map(Number);letnumsinput[2].split( ).map(Number);// 使用 Set 进行去重letsnewSet();s.add(0);for(leti0;in;i){for(letj0;jnums[i];j){lettempListArray.from(s);letnewElementstempList.map(xxweight[i]);newElements.forEach(es.add(e));}}console.log(s.size);rl.close();}});Gopackagemainimport(bufiofmtosstrconvstrings)funcmain(){// 读取输入reader:bufio.NewReader(os.Stdin)nStr,_:reader.ReadString(\n)n,_:strconv.Atoi(strings.TrimSpace(nStr))weightStr,_:reader.ReadString(\n)weight:strToIntArray(weightStr)numsStr,_:reader.ReadString(\n)nums:strToIntArray(numsStr)// 使用 map 作为 set 进行去重s:make(map[int]bool)s[0]truefori:0;in;i{forj:0;jnums[i];j{tempList:make([]int,0,len(s))forkey:ranges{tempListappend(tempList,key)}newElements:make([]int,len(tempList))fork,x:rangetempList{newElements[k]xweight[i]}for_,newVal:rangenewElements{s[newVal]true}}}fmt.Println(len(s))}// strToIntArray 将输入字符串转换为整数数组funcstrToIntArray(inputstring)[]int{fields:strings.Fields(input)arr:make([]int,len(fields))fori,v:rangefields{arr[i],_strconv.Atoi(v)}returnarr}题解二思路完全背包算法处理,dp[j] dp[j - weight[i] * num]c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includelist #includequeue #includeset using namespace std; int main() { int n; cin n; vectorint weight(n); vectorint nums(n); for (int i 0; i n; i) { cin weight[i]; } for (int i 0; i n; i) { cin nums[i]; } // 完全背包 int sum 0; for (int i 0; i n; i) { sum weight[i] * nums[i]; } vectorint dp(sum 1, 0); dp[0] 1; // 完全背包 for (int i 0; i n; i) { for (int j 1; j nums[i]; j) { for (int k sum; k weight[i] * j; k--) { if (dp[k - weight[i]]) { dp[k] 1; } } } } int count 0; for (int i 0; i sum; i) { if (dp[i]) { count; } } cout count; return 0; }JAVAimport java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); int[] weight new int[n]; int[] nums new int[n]; for (int i 0; i n; i) { weight[i] scanner.nextInt(); } for (int i 0; i n; i) { nums[i] scanner.nextInt(); } scanner.close(); // 计算总重量 int sum 0; for (int i 0; i n; i) { sum weight[i] * nums[i]; } // 完全背包 DP boolean[] dp new boolean[sum 1]; dp[0] true; // 初始状态 for (int i 0; i n; i) { for (int j 1; j nums[i]; j) { for (int k sum; k weight[i] * j; k--) { if (dp[k - weight[i]]) { dp[k] true; } } } } // 统计可达的重量数 int count 0; for (boolean v : dp) { if (v) count; } System.out.println(count); } }Pythonimportsys# 读取输入nint(sys.stdin.readline().strip())weightlist(map(int,sys.stdin.readline().split()))numslist(map(int,sys.stdin.readline().split()))# 计算总重量sum_weightsum(weight[i]*nums[i]foriinrange(n))# 完全背包 DPdp[0]*(sum_weight1)dp[0]1# 初始状态foriinrange(n):forjinrange(1,nums[i]1):forkinrange(sum_weight,weight[i]*j-1,-1):ifdp[k-weight[i]]:dp[k]1# 统计可达的重量数print(sum(dp))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letinput[];rl.on(line,(line){input.push(line.trim());if(input.length3){letnparseInt(input[0]);letweightinput[1].split( ).map(Number);letnumsinput[2].split( ).map(Number);// 计算总重量letsum0;for(leti0;in;i){sumweight[i]*nums[i];}// 完全背包 DPletdpnewArray(sum1).fill(0);dp[0]1;for(leti0;in;i){for(letj1;jnums[i];j){for(letksum;kweight[i]*j;k--){if(dp[k-weight[i]]){dp[k]1;}}}}// 统计可达的重量数letcountdp.reduce((acc,val)accval,0);console.log(count);rl.close();}});Gopackagemainimport(bufiofmtosstrconvstrings)funcmain(){// 读取输入reader:bufio.NewReader(os.Stdin)nStr,_:reader.ReadString(\n)n,_:strconv.Atoi(strings.TrimSpace(nStr))weightStr,_:reader.ReadString(\n)weight:strToIntArray(weightStr)numsStr,_:reader.ReadString(\n)nums:strToIntArray(numsStr)// 计算总重量sum:0fori:0;in;i{sumweight[i]*nums[i]}// 完全背包 DPdp:make([]bool,sum1)dp[0]true// 初始状态fori:0;in;i{forj:1;jnums[i];j{fork:sum;kweight[i]*j;k--{ifdp[k-weight[i]]{dp[k]true}}}}// 统计可达的重量数count:0for_,v:rangedp{ifv{count}}fmt.Println(count)}// strToIntArray 将输入字符串转换为整数数组funcstrToIntArray(inputstring)[]int{fields:strings.Fields(input)arr:make([]int,len(fields))fori,v:rangefields{arr[i],_strconv.Atoi(v)}returnarr}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询