在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;}新聞熱點
疑難解答