对于本题而言,我们不妨可以直接贪心,每次尽可能多的把每一位的1消掉一个.如此在线性的复杂度内即可做出.
#include <bits/stdc++.h> int cnt[8];//统计每位的个数. std::vector<int>v; int main() { int n,ans=0;std::cin>>n; int p=1000000;for(int i=1;i<=7;i++) {cnt[i]=n/p;if(cnt[i]) n-=cnt[i]*p;p/=10;ans=std::max(ans,cnt[i]);} std::cout<<ans<<'\n';int f=0; while(true) { int f=0,sum=0; for(int i=1;i<=7;i++) { sum*=10; if(cnt[i]) { f=1;sum+=1;cnt[i]--; } } if(!f) break; else v.push_back(sum); } for(int i=0;i<v.size();i++) std::cout<<v[i]<<' ';puts(""); }