Apple Catching - POJ 2385 - Virtual Judge
状态:第i分钟移动j次能吃多少个苹果
决策:第i分钟动不动
转移:如果移动,dp[i][j]=dp[i-1][j-1]+第i分钟移动j次掉不掉苹果
如果不移动dp[i][j]=dp[i-1][j]+第i分钟移动j次掉不掉苹果
AC代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) //#pragma GCC optimize("Ofast") #include <iostream> #include <queue> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <map> #include <vector> #include <set> #include <stack> #include <numeric> #include <iomanip> #define lowbit(x) ((x) & -(x)) using namespace std; const int INF = 0x3f3f3f3f; const int mod = 1000000007; void solve() { int t, w; cin >> t >> w; vector<int> a(t + 10); for (int i = 1; i <= t; i++) { cin >> a[i]; } vector<vector<int> > dp(1010, vector<int>(40, 0)); for (int i = 1; i <= t; i++) { for (int j = 0; j <= w; j++) { if (j > 0) { dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + (a[i] == j % 2 + 1); } else { dp[i][j] = dp[i - 1][j] + a[i] % 2; } } } cout << dp[t][w] << endl; return; } int main() { ios::sync_with_stdio(false); //cin.tie(nullptr); int _t = 1; //cin >> _t; while (_t--) { solve(); } return 0; } /* */
Apple Catching经典dp
最新推荐文章于 2022-03-07 20:38:17 发布