1 条题解
-
0
神奇的 dp 优化,我至今没见过(奇怪的知识增加了)。
#include<bits/stdc++.h> using namespace std; #define int long long const int N=2e5+10; int mx[N],mx2[N],col[N],a[N],b[N],dp[N][510]; signed main() { int n,k;cin>>n>>k; for(int i=1;i<=n;i++)cin>>a[i]>>b[i];n++; for(int i=1;i<=n;i++)mx[i]=mx2[i]=-1e18; for(int i=1;i<=n;i++)for(int j=0;j<=min(i-1,k);j++) { if(col[i-j-1]==a[i]) dp[i][j]=mx2[i-j-1]+b[i]; else dp[i][j]=mx[i-j-1]+b[i]; if(col[i-j]==a[i]) { if(dp[i][j]>mx[i-j])mx[i-j]=dp[i][j]; } else { if(dp[i][j]>mx[i-j])mx2[i-j]=mx[i-j],mx[i-j]=dp[i][j],col[i-j]=a[i]; else if(dp[i][j]>mx2[i-j])mx2[i-j]=dp[i][j]; } } if(dp[n][k]<0)cout<<-1; else cout<<dp[n][k]; return 0; }
- 1
信息
- ID
- 2598
- 时间
- 5000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 4
- 上传者