POJ--2385 Apple Catching(DP)
记录
16:06 2023-5-26
http://poj.org/problem?id=2385
reference:《挑战程序设计竞赛(第2版)》第二章练习题索引 p135
....提交了好几天了,POJ挂了一直没出结果,现在出了才写,都有点忘了。
dp[i][j] 定义为 i为进行移动的次数 到 j 时间可以获得的最大值,dp[i][j] = max(dp[i-1][j-1], dp[i][j-1]) + tree[i % 2][j],这是没有优化的结果
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX_N 1000
#define MAX_M 30
typedef long long ll;
typedef unsigned int uint;
const int INF = 0x3f3f3f3f;
int T, W;
//dp[i][j] 定义为 i为进行移动的次数 到 j 时间可以获得的最大值
// 0=< i <=W 1=< j <=T
//dp[i][j] = max(dp[i-1][j-1], dp[i][j-1]) + tree[i % 2][j];
int dp[MAX_M][MAX_N + 1];
int tree[2][MAX_N + 1];
void solve() {
int result = -1;
for(int i = 0; i <= W; i++) {
for(int j = 1; j <= T; j++) {
if(i == 0) {
dp[i][j] = dp[i][j-1] + tree[i % 2][j];
} else {
dp[i][j] = max(dp[i][j-1], dp[i-1][j-1]) + tree[i % 2][j];
}
if(j == T) {
if(result < dp[i][T]) {
result = dp[i][T];
}
}
}
}
printf("%d\n", result);
}
int main() {
scanf("%d %d", &T, &W);
int t;
for(int i = 1; i <= T; i++) {
scanf("%d", &t);
tree[(t-1) % 2][i] = 1;
}
solve();
}
分类:
POJ
, 算法题 / 动态规划(dp)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】