pojApple Catching(dp)

题目链接:http://poj.org/problem?id=2385

简单说一下我的思路:

建一个dp[i][j]数组,其中 i 表示第 i 秒, j 表示在第 i 秒,第 j 次移动到另一颗树下,

那么在第i秒第j次移动到另一颗树下的最优解就是前一秒由另一棵树下移动到此树下与前一秒就是在这棵树下没有移动之间的最大值,再加上这一秒在此树下所掉落的苹果数量。

由此可得状态转移方程dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + a[i][j%2 + 1];

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdio>
 6 #define inf 0x3f3f3f3f
 7 using namespace std;
 8 const int N = 1005;
 9 const int M = 35;
10 
11 int dp[N][M], a[N][3];
12 
13 int main() {
14 
15     int t, w;
16     cin >> t >> w;
17     for (int i = 1; i <= t; i++) {
18         int ap;
19         cin >> ap;
20         a[i][ap] = 1;
21     }
22     for (int i = 1; i <= t; i++) {
23         for (int j = 2; j <= w + 2; j++) {
24             dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j % 2 + 1];
25         }
26     }
27     cout << dp[t][w + 2] << "\n";
28 
29     return 0;
30 }
复制代码

 

posted @   Keyzee  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示