山外青山题外题~~(求助
  • 板块灌水区
  • 楼主Tomwsc
  • 当前回复5
  • 已保存回复7
  • 发布时间2024/8/28 17:25
  • 上次更新2024/8/28 20:01:27
查看原帖
山外青山题外题~~(求助
1418967
Tomwsc楼主2024/8/28 17:25

题目:

Description:

给定n种砝码(每种砝码有无限个)和一个整数M,求至少需要几个砝码才可以称出刚好M克。

Input:

第一行:NM。(n<=100,m<=1000) 第二行:每种砝码的重量w[i]。

Output:

一行:称出重量m最少需要的砝码个数;如果称不出重量m则输出“Impossible”

我的代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n , m , minn = INT_MAX , cnt;
int w[100001];
bool flag[100001] = {false};
queue<int>q1;
queue<int>q2;

void bfs()
{
	q1.push(0);
	q2.push(0);
	while(!q1.empty() && !q2.empty())
	{
		if(q1.front() < m)
			for(int i = 1;i <= n;i ++){
				int x = q1.front() + w[i];
				int y = q2.front() + 1;
				if(flag[x])
					break;
				q1.push(x);
				q2.push(y);
				flag[x] = true;
				if(x == m){
					minn = min(minn , y);
					break;
				}
			}
		q1.pop();
		q2.pop();
	}
	return;
}
signed main()
{
	cin >> n >> m;
	for(int i = 1;i <= n;i ++)
		cin >> w[i];
	cout << endl;
	bfs();
	if(minn == INT_MAX)	cout << "Impossible";
	else	cout << minn;
	return 0;
}

QAQ

2024/8/28 17:25
加载中...