题目来源: 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; }