题目:http://poj.org/problem?id=3187
题意:
像这样,输入N : 表示层数,输入over表示最后一层的数字,然后这是一个杨辉三角,根据这个公式,由最后一层的数,推出第一行的数字(由1~N组成)。如果有多个解,按字典序升序,输出第一个解。
题解:水题,不多说
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; int N, over; void solve() { int num[11][11]; scanf("%d%d", &N, &over); for (int i = 1; i <= N; i++) { num[0][i - 1] = i; } do { for (int i = 1; i < N; i++) { for (int j = 0; j < N - i; j++) { num[i][j] = num[i - 1][j] + num[i - 1][j + 1]; } } // cout << "Debug: " << num[N - 1][0] << endl; if (num[N - 1][0] == over) { break; } } while (next_permutation(num[0], num[0] + N)); //本来就是按字典序来搜索的,根本不用考虑题目最后一个条件 →_→,直接输出第一行就可以 for (int i = 0; i < N; i++) { if (i != N - 1) { printf("%d ", num[0][i]); } else { printf("%d ", num[0][i]); } } } int main() { solve(); return 0; }