https://www.luogu.org/problemnew/show/P2089
非常暴力的dfs,不知道不剪枝会怎么样,但是其实最多也就3的10次方,大不到哪里去。还有一个细节就是大于序并不是字典序的逆序……233这样都没发现我是服了。
#include<bits/stdc++.h> using namespace std; #define ll long long int n; set<ll> ans; void dfs(int i,int c,int res,ll sum){ res-=c; sum=sum*10+c; if(res<0) return; if((10-i)>res||(10-i)*3<res) return; if(i==10){ if(res!=0) return; else{ ans.insert(sum); } } else{ dfs(i+1,1,res,sum); dfs(i+1,2,res,sum); dfs(i+1,3,res,sum); } } int main(){ scanf("%d",&n); dfs(1,1,n,0); dfs(1,2,n,0); dfs(1,3,n,0); printf("%d\n",ans.size()); for(auto i:ans){ //cout<<i<<endl;; ll t=i; stack<int> s; while(t){ s.push(t%10); t/=10; } while(!s.empty()){ printf("%d",s.top()); s.pop(); if(s.empty()) printf("\n"); else printf(" "); } } }
原文:https://www.cnblogs.com/Yinku/p/10316071.html