洛谷题解dfs题解 Keep Distance
xyx404
题目传送门。
思路:
题目要求求出所有的方案,考虑 dfs 找出每个方案。
利用深度优先搜索找出所有方案,遇到可能方案时存下来,并使我们用来记录一共有几个可能结果的变量加一,最后输出有几种可能和所有可能的方案。
注意 dfs 里要按从小到大的顺序搜。
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define itn int #define ull unsigned long long int n,m; int ans[15],cnt; vector<int>anss; void print(){ cnt++; for(int i=1;i<=n;i++){ anss.push_back(ans[i]); }
return ; } void dfs(int now,int v){
if(now==n+1){ print();return; } if(v>m)return; for(int i=v;i<=m-(n-now)*10;i++)ans[now]=i,dfs(now+1,i+10); return ; } int main(){ cin>>n>>m; dfs(1,1); cout<<cnt<<"\n"; for(int i=0;i<anss.size();i++){ cout<<anss[i]<<" "; if(i%n==n-1)cout<<"\n"; } return 0; }
|
AC 记录。