在2行5列的格子中填入1到10的数字。 要求: 相邻的格子中的数,右边的大于左边的,下边的大于上边的。 如【图1.png】所示的2种,就是合格的填法。 请你计算一共有多少种可能的方案。
答案 42
同样小学奥数题 都成模板化了
#include <bits/stdc++.h>using namespace std;list<int> li;int ans = 0;int a[20];bool ok(int i, int x){ if (i == 0) return true; if (i < 5) return x > a[i - 1]; if (i == 5) return x > a[0]; return x > a[i - 1] && x > a[i - 5];}void dfs(int k){ if (k == 10) ans++; for (auto it = li.begin(); it != li.end(); it++) { if (ok(k, *it)) { a[k] = *it; it = li.erase(it); dfs(k + 1); it = li.insert(it, a[k]); } }}int main(){ for (int i = 1; i <= 10; i++) li.push_back(i); dfs(0); cout << ans << endl;}新闻热点
疑难解答