E - Takahashi and Animals(动态规划)

简介: 笔记

题目描述


30.png


样例


Sample Input 1


5

2 5 3 2 5


Sample Output 1


7


Sample Input 2


20

29 27 79 27 30 4 93 89 44 88 70 75 96 3 78 39 97 12 53 62


Sample Output 2


426


数据范围


31.png


代码


int f[N][2];
int g[N][2];
// f[i][0]: 当前i没有饱,i之前所需要的最小值
// f[i][1]: 当前i饱了,i之前所需要的最小值
// f[i][0] = f[i - 1][1]
// f[i][1] = min(f[i - 1][0] + a[i - 1],  f[i - 1][1], a[i]);  ×
// 向后转移,你会发现,前面饱了的,会带i饱
// 不好转移?
// f[i][0]: 当前不是自己喂饱,前i的总最小值
// f[i][1]: 当前是自己喂饱,前i的总最小值
// f[i][0] = f[i - 1][1];
// f[i][1] = min(f[i - 1][0], f[i - 1][1]) + a[i];
int a[N];
void solve() {
  int n; cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  f[1][0] = 2e9, f[1][1] = a[1];
  for (int i = 2; i <= n; i++) {
    f[i][0] = f[i - 1][1];
    f[i][1] = min(f[i - 1][0], f[i - 1][1]) + a[i];
  }
  g[1][0] = 2e9, g[1][1] = a[2];
  for (int i = 2; i <= n; i++) {
    g[i][0] = g[i - 1][1];
    g[i][1] = min(g[i - 1][0], g[i - 1][1]) + a[i % n + 1];
  }
  cout << min(min(f[n][0], f[n][1]), min(g[n][0], g[n][1])) << endl;
}
signed main() {
  IOS int _ = 1;
  // cin >> _;
  while(_--) { solve(); }
  return 0;
}
相关文章
|
6月前
|
C++ NoSQL 容器
动态规划二
动态规划二
|
算法
【学会动态规划】按摩师(11)
【学会动态规划】按摩师(11)
53 0
|
6月前
|
存储 JavaScript 机器人
动态规划问题
动态规划问题
41 0
|
6月前
动态规划1
动态规划1
36 0
动态规划1
|
存储
【动态规划】
【动态规划】
|
机器学习/深度学习 算法
动态规划详解
前段时间一直在做关于数据结构的题,也算是对数据结构有了一定的了解,知道了有些数据结构的基本算法。现在刚刚开始接触动态规划,其实写这篇文章的初衷是一来锻炼一下自己的总结能力,二来也是希望通过这篇文章,来指引和我一样的初学者,废话不多说了,开始吧。
56 0
|
定位技术
动态规划题:夺宝奇兵
动态规划题:夺宝奇兵
88 0
动态规划-子序列问题
前言 在上篇文章我们学习了动态规划的公共子序列问题,现在我们来学习下动态规划的单字符串子序列问题。
|
算法 前端开发 JavaScript
理解动态规划
理解动态规划
理解动态规划