제출 #1364610

#제출 시각아이디문제언어결과실행 시간메모리
1364610HasanV11010238Teleporter 2 (JOI26_teleporter)C++20
0 / 100
3251 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 1000000000000000000
int n;
int main(){
    ll m, k, l, r, c;
    cin>>n>>m>>k;
    vector<vector<ll>> ra;
    for (int i = 1; i <= m; i++){
        cin>>l>>r>>c;
        ra.push_back({r, l, c, i});
    }
    ra.push_back({1, 1, 0, 0});
    m++;
    sort(ra.begin(), ra.end());
    vector<vector<int>> v(m + 1);
    for (int i = 0; i < m; i++){
        for (int j = i + 1; j < m; j++){
            if (ra[i][0] <= ra[j][1]) v[ra[j][3]].push_back(i);
        }
    }
    vector<vector<ll>> dp(m + 1, vector<ll>(k + 1, INF)), co(n + 1, vector<ll>(n + 1, 0));
    for (int i = 0; i < m; i++){
        co[ra[i][1]][ra[i][0]] += ra[i][2];
    }
    for (int i = n; i >= 1; i--){
        for (int j = i + 1; j <= n; j++){
            
            co[i][j] = (co[i][j] + co[i + 1][j] + co[i][j - 1] - co[i + 1][j - 1]);
        }
    }
    vector<int> fr(m + 1, 0);
    dp[0][0] = 0;
    for (int i = 1; i <= k; i++){
        fr.assign(m + 1, 0);
        for (auto &el : ra){
            int ind = el[3];
            dp[ind][i] = min(dp[ind][i], dp[ind][i - 1]);
            if (ind == 0) continue;
            while (fr[ind] + 1 < v[ind].size()){
                ll val = dp[ra[v[ind][fr[ind]]][3]][i - 1] + co[ra[v[ind][fr[ind]]][0]][el[0] - 1];
                ll val2 = dp[ra[v[ind][fr[ind] + 1]][3]][i - 1] + co[ra[v[ind][fr[ind] + 1]][0]][el[0] - 1];
                if (val < val2) break;
                fr[ind]++;
            }
            dp[ind][i] = min(dp[ind][i], dp[ra[v[ind][fr[ind]]][3]][i - 1] + co[ra[v[ind][fr[ind]]][0]][el[0] - 1]);
        }
    }
    ll ans = INF;
    for (int i = 0; i < m; i++){
        ll co = 0;
        for (int j = i + 1; j < m; j++){
            if (ra[i][0] <= ra[j][1]) co += ra[j][2];
        }
        for (int j = 0; j <= k; j++){
            ans = min(ans, dp[ra[i][3]][j] + co);
        }
    }
    cout<<ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…