没啥好讲的这道题,主要是赛场做题的心态。应该是很燥吧,以至于题目也看错。如果没看错题,我是否就有勇气来个暴力呢? 不管怎样,如果有思路就试试吧,,,,代码如下
#include <iostream> #include <cstdio> using namespace std; int n, sum; int ans = 0; void getsum(const int *A) { int B[12]; for(int i = 0; i < n; i++) B[i] = A[i]; for(int i = n - 1; i >= 0; i--) { for(int j = 0; j < i; j++) B[j] = B[j] + B[j+1]; } if(B[0] == sum) { ans = 1; int fir = 1; for(int i = 0; i < n;i++) { if(fir) fir = 0; else printf(" "); cout << A[i]; } cout<<endl; } return; } void dfs(int *A, int cur) { if(ans) return; if(cur == n) { getsum(A); return; } for(int i = 1; i <= n; i++) { int ok = 1; for(int j = 0; j < cur; j++) if(A[j] == i)ok = 0; if(ok) { A[cur] = i; dfs(A, cur + 1); } } return; } int main() { cin >> n >> sum; int A[12]; dfs(A, 0); }