题目来源:
https://ac.nowcoder.com/acm/contest/5672/B
题意:
将n×m个口罩打包成若干份,要求打包完后无论是分给n家医院还是m家医院,都能够均分。要求输出总份数最少的方案中字典序最大的。(1≤T≤100,1≤n,m≤104)
解题思路:dfs+递归,关键是在约束条件下同时满足两个条件,所以要一步步推衍。
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> ans;
void dfs(int n, int m)
{
if(n < m)
swap(n, m);
for(int i = 1; i <= m; i++)
ans.push_back(m);
if(n != m)
dfs(n - m, m);
}
int main()
{
int q;
cin>>q;
while(q--)
{
cin>>n>>m;
ans.clear();
dfs(n, m);
cout<<ans.size()<<endl;
for(int i = 0; i < ans.size(); i++)
{
if(i > 0)
cout<<" ";
cout<<ant[i];
}
cout<<endl;
}
return 0;
}