题目链接:Codeforces - Shovels Shop
显然最多买k个物品,然后 k^2 dp即可。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e5+10;
int dp[N],mx[N],n,m,a[N],k;
signed main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1,x,y;i<=m;i++) scanf("%d %d",&x,&y),mx[x]=max(mx[x],y);
sort(a+1,a+1+n),memset(dp,0x3f,sizeof dp),dp[0]=0;
for(int i=1;i<=k;i++) a[i]+=a[i-1];
for(int i=1;i<=k;i++) for(int j=0;j<=i;j++)
dp[i]=min(dp[i],dp[j]+a[i]-a[j+mx[i-j]]);
cout<<dp[k];
return 0;
}