思路:
暴力O(
n
2
n^2
n2)修改对于一个点x的最小修改价值,
比赛数据真的虚伪,O(
N
2
N^2
N2)修改的思路都可以水过。
我们将一个点最小修改价值作为背包问题中的物品体积,
一个点的信号强度作为背包问题中的物品价值。
那答案就是跑一个01背包就行了。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 10;
ll n, m, k, v[N], l, r, c, sum, f[N], w[N];
int main()
{
scanf("%lld%lld%lld", &n, &m, &k);
for(ll i = 1; i <= n; i++)
scanf("%lld", &v[i]), v[i] = -v[i], sum += v[i];
memset(w, 127 / 3, sizeof(w));
for(ll i = 1; i <= m; i++)
{
scanf("%lld%lld%lld", &l, &r, &c);
for(ll j = l; j <= r; j++) w[j] = min(w[j], c);
}
for(ll i = 1; i <= n; i++)
for(ll j = k; j >= w[i]; j--)
f[j] = max(f[j], f[j - w[i]] + v[i]);
printf("%lld\n", -(sum - f[k]));
return 0;
}