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 }
永远热爱,永远向着光。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】