【华为OJ】称砝码
2016-07-13 14:00
351 查看
描述 | 现有一组砝码,重量互不相等,分别为m1、m2……mn;他们可取的最大数量分别为x1、x2……xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。 注: 称重重量包括0要对输入数据进行校验 方法原型:public static int fama(int n, int[] weight, int[] nums) |
---|---|
知识点 | 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | int n:n表示有多少组重量不同的砝码,1<=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<> int[] weight:表示n组砝码的重量,1<=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<> int[] num:表示n组砝码的最大数量,1<=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<> |
输出 | 利用给定的砝码可以称出的不同的重量数 |
样例输入 | 2 1 2 2 1 |
样例输出 | 5 |
源代码
#include <iostream>
#include <vector>
using namespace std;
int fama(int n, int weight[], int nums[]){
//定义bool型标记数组,记录该重量是否存在
//计算标记数组的最大可能的不同重量数,分配空间
int maxWeight = 0;
for (int i = 0; i < n; i++)
maxWeight += weight[i] * nums[i];
vector<bool> flag(maxWeight + 1, false);
//标记数组的初始状态
flag[0] = true;//没有砝码的情况,称重重量为0,也属于一种情况
int total = 0;
int count = 1;//没有砝码的情况,算一种
//从第1组砝码开始添加
int sum = 0;
for (int i = 0; i < n; i++){//循环添加第i组砝码
for (int j = 1; j <= nums[i]; j++){//第i组砝码,逐个添加
for (int k = 0; k <= total; k++){
if (flag[k]){
sum = k + weight[i] * j;
if (!flag[sum]){
flag[sum] = true;
count++;
}
}
}
}
total = sum;
}
return count;
}
void main(){
int n;
cin >> n;
int* weight = new int
;
int* nums = new int
;
for (int i = 0; i < n; i++)
cin >> weight[i];
for (int i = 0; i < n; i++)
cin >> nums[i];
cout << fama(n, weight, nums) << endl;
delete[] weight;
delete[] nums;
}
相关文章推荐
- 【风宇冲】Unity3D教程宝典之Shader篇:基础讲学习方法技巧
- 正则表达式常用用法汇总
- 时间到底是用来坐公交还是睡觉
- OpenGL使用glColorMaterial设置材质
- 删除一张600万记录表的一个索引需要多长时间?
- 一些常用的UI控件
- ubuntu 串口问题
- 设计模式三-行为模式
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
- vSphere 6.0: remove partitions from existing storage devices via UI
- Maven 手动添加 JAR 包到本地仓库
- 常用设置字控件层添加到父控件顺序的方法
- SVN更新、合并、提交的区别(两人同时提交同一文件是否会覆盖的问题)
- 固定大小块的内存池设计
- maven+svn忽略提交到svn的文件
- centos7安装iptables
- Action注入错误
- android studio 报Error:failed to find Build Tools revision 23.0.0 rc2
- Java多线程1:进程与线程概述
- Java学习-Hello world