P2858 [USACO06FEB]Treats for the Cows G/S题解
【问题分析】
此题题目意思每次取左或右的零食。
按区间dp的惯例,要区间从小到大dp。
上代码。
【Code】
#include<bits/stdc++.h>
using namespace std;
const int N = 2000 + 5;
int f[N][N], a[N];
//f[i][j]:最后做i-j区间的最大值
int n;
int main()
{
scanf ("%d", &n);
for (int i = 0;i < n; i++)
{
scanf ("%d", a + i);
f[i][i] = a[i] * n;
//最后一个必定过了n天
//这是最小的区间,以此为初始值
}
for(int len = 1;len < n; len++)
//len为i后面跟着的数量
for(int i = 0, j = len + i;j < n; i++, j++)
f[i][j] = max(f[i + 1][j] + a[i] * (n - len), f[i][j - 1] + a[j] * (n - len));
//第一段是选左边,第二段是选右边
printf ("%d", f[0][n - 1]);
//所有的最大值在f[0][n-1]中
return 0;
}
【代码调试】
-
测试样例
-
自测数据(边界值,特殊值, 本题中有特殊值了)
输入:
7
100
100
100
100
100
1
101
输出:
2603
完结撒花睡觉去喽
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现