連接: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; }