题目:
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