題解 [HDU 6745] Dec (簡單DP)
阿新 • • 發佈:2021-07-30
錯誤想法帶來錯的程式碼,
為什麼一個簡單DP題能被我想成複雜的貪心啊??
初始有 \(a,b\) 兩個正整數,每次可以從中選一個大於 1 的數減 1,最後兩個都會減到 1,我們想知道在過程中兩個數互質的次數最多是多少。
直接預處理找出 \(1000\) 以內所有互質情況的就可以
\[dp_{i,j} = max(dp_{i - 1,j},dp_{i,j - 1}) + gcd(i,j) == 1 \]const int N = 1010; int dp[N][N], Gcd[N][N]; int main() { cin.tie(nullptr)->sync_with_stdio(false); dp[1][1] = 1; for (int i = 1; i <= 1000; ++i) for (int j = 1; j <= 1000; ++j) dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + (__gcd(i, j) == 1); int _; for (cin >> _; _--;) { int a, b; cin >> a >> b; cout << dp[a][b] << "\n"; } }
The desire of his soul is the prophecy of his fate
你靈魂的慾望,是你命運的先知。