这是 70分连样例都过不了的代码
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int dp[4005][4005];
int N , M , K , T , ans;
struct QWQ{
int num , i;
};
int main(void){
scanf("%d%d%d%d" , &N , &M , &K , &T);
while(K--){
int x , y , v;
scanf("%d%d%d" , &x , &y , &v);
dp[x][y] = v;
}
// for(int i = 1;i <= N;i++)
// dp[0][i] = mapp[1][i];
for(int i = 1;i <= N;i++){
deque <QWQ> q;
q.clear();
for(int j = 1;j <= T;j++){
while(!q.empty() && q.back().num <= dp[i - 1][j])
q.pop_back();
q.push_back((QWQ){dp[i - 1][j] , j});
}
for(int j = 1;j <= M;j++){
if(j + T <= M){
while(!q.empty() && q.back().num <= dp[i - 1][j + T])//改动
q.pop_back();
q.push_back((QWQ){dp[i - 1][j + T] , j + T});
}
while(!q.empty() && q.front().i <= j - T)//改动
q.pop_front();
dp[i][j] += q.front().num;
}
}
for(int i = 1;i <= M;i++)
ans = max(ans , dp[N][i]);
printf("%d\n" , ans);
}
这是 AC 的代码
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int dp[4005][4005];
int N , M , K , T , ans;
struct QWQ{
int num , i;
};
int main(void){
scanf("%d%d%d%d" , &N , &M , &K , &T);
while(K--){
int x , y , v;
scanf("%d%d%d" , &x , &y , &v);
dp[x][y] = v;
}
// for(int i = 1;i <= N;i++)
// dp[0][i] = mapp[1][i];
for(int i = 1;i <= N;i++){
deque <QWQ> q;
q.clear();
for(int j = 1;j <= T;j++){
while(!q.empty() && q.back().num <= dp[i - 1][j])
q.pop_back();
q.push_back((QWQ){dp[i - 1][j] , j});
}
for(int j = 1;j <= M;j++){
if(j + T <= M){
while(!q.empty() && q.back().num < dp[i - 1][j + T])
q.pop_back();
q.push_back((QWQ){dp[i - 1][j + T] , j + T});
}
while(!q.empty() && q.front().i < j - T)
q.pop_front();
dp[i][j] += q.front().num;
}
}
for(int i = 1;i <= M;i++)
ans = max(ans , dp[N][i]);
printf("%d\n" , ans);
}
代码仅在 36 和 32 改动,把 <= 改成了 < 就通过了。
这是为什么qwq