设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),求用这些砝码能称出不同的重量个数。输入1g、2g、3g、5g、10g、20g的砝码个数。输出能称出不同重量的个数。
如输入:1 1 0 0 0 0
输出:3
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
int weight[6] = { 1, 2, 3, 5, 10, 20 };
int num[6];
bool visit[1000] = { false }; //重量是否已经存在
int tempWeight;
int count = 0; //统计总的重量个数
for (int i = 0; i < 6; i++)
{
cin >> num[i];
}
for (int i = 1; i <= num[0]; i++)
{
visit[i*weight[0]] = true;
}
tempWeight = num[0] * weight[0]; //存储当前最大重量
for (int i = 1; i < 6; i++)
{
for (int j = 1; j <= num[i]; j++)
{
for (int k = 0; k <= tempWeight; k++)
{
if (k + j * weight[i] >= 1000)
break;
if (visit[k] == true && visit[k + j * weight[i]] == false || k == 0) //当前重量=先前重量+当前砝码所配置的重量
{
visit[k + j * weight[i]] = true;
}
}
}
tempWeight += num[i] * weight[i];
}
for (int i = 0; i < 1000; i++)
{
if (visit[i])
count++;
}
cout << count << endl;
}