P4766 [CERC2014] Outer space invaders
P4766 [CERC2014] Outer space invaders - 洛谷
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int T,n;struct alien{int a,b,d;
};void solve()
{cin>>n;vector<alien>p(n);set<int>tset;vector<int>time;for(int i=0;i<n;++i){cin>>p[i].a>>p[i].b>>p[i].d;tset.insert(p[i].a);tset.insert(p[i].b);}for(auto i:tset)time.push_back(i);int m=time.size();sort(time.begin(),time.end());vector<int>s_idx(n),e_idx(n);for(int i=0;i<n;++i){s_idx[i]=lower_bound(time.begin(),time.end(),p[i].a)-time.begin();e_idx[i]=lower_bound(time.begin(),time.end(),p[i].b)-time.begin();}vector<vector<int>>g(m,vector<int>(m,-1));for(int i=0;i<n;++i){int l=s_idx[i],r=e_idx[i];if(g[l][r]==-1||p[i].d>p[g[l][r]].d){g[l][r]=i;}}for(int len=2;len<=m;++len){for(int i=0;i+len-1<m;++i){int j=i+len-1;int c1=g[i][j-1];int c2=g[i+1][j];int c=g[i][j];if(c1!=-1&&(c==-1||p[c1].d>p[c].d))c=c1;if(c2!=-1&&(c==-1||p[c2].d>p[c].d))c=c2;g[i][j]=c;}}vector<vector<ll>>dp(m+1,vector<ll>(m+1,1e18));for(int len=1;len<=m;++len){for(int i=0;i+len-1<m;++i){int j=i+len-1;int k=g[i][j];if(k==-1){dp[i][j]=0;continue;}for(int t=s_idx[k];t<=e_idx[k];++t){ll cost=p[k].d;if(i<=t-1)cost+=dp[i][t-1];if(t+1<=j)cost+=dp[t+1][j];dp[i][j]=min(dp[i][j],cost);}}}cout<<dp[0][m-1]<<endl;
}int main()
{cin>>T;while(T--)solve();return 0;
}
