#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 2e3+5;
int n,m,a[N],pre[N][N],val[N],sum[N],check[N];
struct vang{
int x,y,c;
};
vang cut[N];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
for(int j = n; j >= n-a[i]+1; j--) pre[j][i] = 1;
}
cin >> m;
for(int i = 1; i <= m; i++){
cin >> cut[i].x >> cut[i].y >> cut[i].c;
swap(cut[i].x,cut[i].y);
cut[i].x = n-cut[i].x+1;
val[i] = cut[i].c;
pre[cut[i].x][cut[i].y] = 0;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++) pre[i][j] += pre[i][j-1]+pre[i-1][j]-pre[i-1][j-1];
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= m; j++){
if(i != j){
int x1 = min(cut[i].x,cut[j].x);
int y1 = min(cut[i].y,cut[j].y);
int x2 = max(cut[i].x,cut[j].x);
int y2 = max(cut[i].y,cut[j].y);
if(pre[x2][y2]-pre[x2][y1-1]-pre[x1-1][y2]+pre[x1-1][y1-1] == 0) sum[i] += val[j];
}
}
}
int ans = 0;
while(true){
int id = -1;
int mx = -1e18;
for(int i = 1; i <= m; i++){
if(!check[i] && sum[i] != 0){
if(mx < sum[i]){
mx = sum[i];
id = i;
}
}
}
if(id == -1) break;
ans += val[id];
check[id] = 1;
for(int i = 1; i <= m; i++){
if(!check[i] && i != id){
int x1 = min(cut[i].x,cut[id].x);
int y1 = min(cut[i].y,cut[id].y);
int x2 = max(cut[i].x,cut[id].x);
int y2 = max(cut[i].y,cut[id].y);
if(pre[x2][y2]-pre[x2][y1-1]-pre[x1-1][y2]+pre[x1-1][y1-1] == 0) sum[i] -= val[id];
}
}
}
cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |