用C++写不用宏定义的DP最大值最小模板代码
时间: 2024-05-05 12:15:08 浏览: 58
以下是使用 C 语言写的不含宏定义的 DP 最大值最小模板代码:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 1005
#define INF 0x7fffffff
int dp[MAXN];
int main() {
int n;
scanf("%d", &n);
memset(dp, INF, sizeof(dp)); // 初始化 dp 数组
dp[0] = 0; // 边界条件
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
for (int j = i; j >= 1; j--) {
dp[j] = dp[j] < dp[j - 1] + x ? dp[j] : dp[j - 1] + x;
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (dp[i] < INF) ans = i;
}
printf("%d\n", ans);
return 0;
}
```
该代码中,我们使用了一个 `dp` 数组来保存状态,其中 `dp[i]` 表示选 $i$ 个数时的最大值最小。我们还使用了一个 `ans` 变量来保存最终答案,即最大的 $i$ 使得 `dp[i] < INF`。在循环中,我们从 $1$ 到 $n$ 枚举每个数,然后从 $i$ 到 $1$ 枚举选了多少个数,更新 `dp` 数组的值。最后输出答案即可。
阅读全文