题解
【入门】跳格子2
1 条题解
-
0
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 100005; long long dp[MAXN]; long long x[MAXN]; int main() { int n, A, B, C; cin >> n >> A >> B >> C; // 生成数列 for (int i = 1; i <= n; i++) { long long tmp = (1LL * A * i * i + B * i + C) % 20000; x[i] = tmp - 10000; } // DP:dp[i] 表示跳到位置 i 时的最小得分 dp[0] = 0; // 起点,无得分 if (n >= 1) { dp[1] = x[1] + dp[0]; // 只能从 0 跳来 } if (n >= 2) { dp[2] = x[2] + min(dp[1], dp[0]); // 从 1 或 0 跳来 } for (int i = 3; i <= n; i++) { dp[i] = x[i] + min(dp[i-1], dp[i-2]); } // 最终跳到 n+1,只能从 n-1 或 n 跳 long long ans = min(dp[n], dp[n-1]); cout << ans << endl; return 0; }
- 1