NC51186. Naptime
描述
输入描述
* Line 1: Two space-separated integers: N and B
* Lines 2..N+1: Line i+1 contains a single integer, , between 0 and 200,000 inclusive
输出描述
The day is divided into 5 periods, with utilities 2, 0, 3, 1, 4 in that order. Goneril must pick 3 periods.
示例1
输入:
5 3 2 0 3 1 4
输出:
6
C++ 解法, 执行用时: 24ms, 内存消耗: 528K, 提交时间: 2022-01-16 11:39:37
#include <bits/stdc++.h> using namespace std; int n,b,u[3835],dp[2][3835][2]; void DP(){ for(int i=2;i<=n;i++)for(int j=0;j<=i;j++){ dp[i&1][j][0]=max(dp[(i-1)&1][j][0],dp[(i-1)&1][j][1]); if(j>0)dp[i&1][j][1]=max(dp[(i-1)&1][j-1][0],dp[(i-1)&1][j-1][1]+u[i]); } } int main(){ while(cin>>n>>b){ for(int i=1;i<=n;i++)cin>>u[i]; if(!b){cout<<"0\n";continue;} memset(dp,-0x3f3f3f3f,sizeof(dp)); dp[1][0][0]=0; dp[1][1][1]=0; DP(); int ans=max(dp[n&1][b][0],dp[n&1][b][1]); memset(dp,-0x3f3f3f3f,sizeof(dp)); dp[1][1][1]=u[1]; DP(); ans=max(ans,dp[n&1][b][1]); cout<<ans<<"\n"; } return 0; }