连接:https://ac.nowcoder.com/acm/contest/1091/D
来源:牛客网
html
一行一个整数n,x 表示一共有n个文件,至多手动删x个文件
接下来n行,每行两个整数a,b 表示手动删除扩充a单位的内存,软件删除扩充b单位的内存
一行一个整数表示最多扩充多少内存
对于30%30\%30%的数据,知足1≤n,x≤101\leq n,x\leq101≤n,x≤10
对于另外30%30\%30%的数据,知足1≤n≤105,x=01\leq n\leq 10^5,x = 01≤n≤105,x=0
对于100%100\%100%的数据,知足1≤n≤105,1≤x≤min{n,103}1\leq n\leq10^5,1\leq x\leq\min\{n,10^3\}1≤n≤105,1≤x≤min{n,103}
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; int n,x; ll s[maxn],t[maxn]; ll dp[3][maxn][3]; int main() { scanf("%d%d",&n,&x); for(register int i=1;i<=n;++i){ scanf("%lld%lld",&s[i],&t[i]); } for(register int i=1;i<=n;++i){ dp[i&1][0][0]=dp[(i-1)&1][0][0]+t[i]; for(register int j=1;j<=min(x,i-1);++j){ dp[i&1][j][0]=max(dp[(i-1)&1][j][0],dp[(i-1)&1][j][1])+t[i]; dp[(i&1)][j][1]=dp[(i-1)&1][j-1][0]+s[i]; } } ll res=0; for(register int i=0;i<=x;++i){ res=max(res,dp[n&1][i][0]); res=max(res,dp[(n&1)][i][1]); } printf("%lld\n",res); return 0; }