单调队列优化0pts求条
查看原帖
单调队列优化0pts求条
1114241
vectorxyz楼主2024/10/2 09:01
#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 4005;
// f[i][j] = max(f[i - 1][x]) + val[i][j];
int f[N][N];
signed main()
{
    int n, m, k, t; cin >> n >> m >> k >> t;
    for(int i = 1;i <= k;i ++ ){
        int x, y, v;
        cin >> x >> y >> v;
        f[x][y] = v;
    }
    for(int i = 1;i <= n;i ++ ){
        deque<int> q;
        for(int j = 1;j <= m;j ++ ){
            while(q.size() && f[i - 1][q.back()] < f[i - 1][j]) q.pop_back();
            q.push_back(j);
            if(j >= t){
                while(q.size() && q.front() < j - t) q.pop_front();
                // cout << val[i - 1][q.front()] << endl;
                f[i][j] += f[i - 1][q.front()];
            }
        }    
    }
    int ans = INT_MIN;
    for(int i = 1;i <=m;i ++ ) ans = max(ans, f[n][i]);
    cout << ans << endl;
    return 0;
}
2024/10/2 09:01
加载中...