<和<=为什么对答案有影响
查看原帖
<和<=为什么对答案有影响
670766
QWQ_SenLin楼主2023/5/28 00:11

这是 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);
}

代码仅在 3636 和 3232 改动,把 <= 改成了 < 就通过了。

这是为什么qwq

2023/5/28 00:11
加载中...