华为OJ——称砝码
2016-07-03 20:19
197 查看
称砝码
每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。
注:
称重重量包括0
方法原型:public static int fama(int n, int[] weight, int[] nums)
[b]输入描述:[/b]
输入包含多组测试数据。
对于每组测试数据:
第一行:n ---砝码数(范围[1,10])
第二行:m1 m2 m3 ... mn ---每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 .... xn ---每个砝码的数量(范围[1,6])
[b]输出描述:[/b]
利用给定的砝码可以称出的不同的重量数
[b]输入例子:[/b]
2
1 2
2 1
[b]输出例子:[/b]
5
解答代码:
题目描述
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn;每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。
注:
称重重量包括0
方法原型:public static int fama(int n, int[] weight, int[] nums)
[b]输入描述:[/b]
输入包含多组测试数据。
对于每组测试数据:
第一行:n ---砝码数(范围[1,10])
第二行:m1 m2 m3 ... mn ---每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 .... xn ---每个砝码的数量(范围[1,6])
[b]输出描述:[/b]
利用给定的砝码可以称出的不同的重量数
[b]输入例子:[/b]
2
1 2
2 1
[b]输出例子:[/b]
5
解答代码:
#include<iostream> #include<vector> #include<cstdio> using namespace std; int main() { int i,j,k,n; while(cin>>n) { vector<int> dataWeight(n+1); vector<int> dataNum(n+1); //输入各砝码质量 for(i=1; i<=n; i++) cin>>dataWeight[i]; //输入个砝码质量 for(i=1; i<=n; i++) cin>>dataNum[i]; int maxWeight=0; for(i=1; i<=n; i++) maxWeight+=dataWeight[i]*dataNum[i]; //构造judge表,表的大小为maxWeight vector<int> judge(maxWeight+1,0); judge[0]=1;//可以称量质量为0的物体 //构造表 for(i=1; i<=n; i++) for(j=maxWeight; j>0; j--) for(k=1; k<=dataNum[i]; k++) if(j-k*dataWeight[i] >= 0) judge[j] = judge[j] | judge[j-k*dataWeight[i]]; int count=0; for(i=0; i<maxWeight+1; i++) { if(judge[i]) count++; } cout<<count<<endl; } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- 华为路由器密码恢复
- 华为交换机的后缀详解
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结