题解:CF358D Dima and Hares
CF358D Dima and Hares
零、废话
是不是考虑该降降难度了。
一、题意
自行理解。
二、思路
注意到第 dp。
定义
定义
:::info{open} 单独一个数无法看出相邻顺序,但用这两个状态,我们就可以表达三只相邻兔子的喂养顺序了。
而延迟计算 dp 就是在求解前 |
|---|
边界
容易看出答案是
转移式子也是顺水推舟地想出来了:
三、代码
#include<iostream>
#define int long long
using namespace std;
const int N = 3000;
int n;
int f[N+5],g[N+5];
int a[N+5],b[N+5],c[N+5];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) cin>>c[i];
f[1] = -2e18;
g[1] = 0;
for(int i=2;i<=n;i++)
{
f[i] = max(f[i-1]+b[i-1],g[i-1]+a[i-1]);
g[i] = max(f[i-1]+c[i-1],g[i-1]+b[i-1]);
}
cout<<max(f[n]+b[n],g[n]+a[n]);
return 0;
}
四、总结 & trick
1. 延迟计算贡献 dp
因为正常的 dp 需要在当前状态的所有信息都确定后才能转移。而此题中,第
2. 闲话
不知道为什么这个题
五、AI 使用声明
使用 Deepseek 改正错误