社区讨论
最后一个点为什么输出0呀
P1070[NOIP 2009 普及组] 道路游戏参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi6obrlf
- 此快照首次捕获于
- 2025/11/20 08:09 4 个月前
- 此快照最后确认于
- 2025/11/20 08:09 4 个月前
RT
我是设的 为第 秒时机器人在 的最优解
CPP#include <iostream>
#include <cstdio>
#define lst(x) ((x == 1) ? N : x - 1)
const int MaxN = 1e3 + 5;
int N, M, P;
int A[MaxN][MaxN], Cost[MaxN], Dp[MaxN][MaxN], Time[MaxN][MaxN], Max[MaxN];
inline int read()
{
register int x = 0;
register char ch = getchar();
while(!isdigit(ch)) ch = getchar();
while(isdigit(ch))
{
x = (x << 1) + (x << 3) + ch - '0';
ch = getchar();
}
return x;
}
int main()
{
N = read();
M = read();
P = read();
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M; ++j)
A[i][j] = read();
for(int i = 1; i <= N; ++i) Cost[i] = read();
for(int i = 1; i <= N; ++i)
{
Time[1][i] = 1;
Dp[1][i] = -Cost[lst(i)] + A[lst(i)][1];
Max[1] = std::max(Max[1], Dp[1][i]);
}
for(int i = 2; i <= M; ++i)
{
for(int j = 1; j <= N; ++j)
{
Time[i][j] = 1;
Dp[i][j] = Max[i - 1] - Cost[lst(j)] + A[lst(j)][i];
if(Time[i - 1][lst(j)] < P && Dp[i][j] < Dp[i - 1][lst(j)] + A[lst(j)][i])
{
Time[i][j] = Time[i - 1][lst(j)] + 1;
Dp[i][j] = Dp[i - 1][lst(j)] + A[lst(j)][i];
}
Max[i] = std::max(Max[i], Dp[i][j]);
}
}
printf("%d\n", Max[M]);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...