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;
}
相关文章
|
7月前
|
C++ NoSQL 容器
动态规划三
动态规划三
|
7月前
|
C++ NoSQL 容器
动态规划二
动态规划二
|
7月前
|
机器人 NoSQL 容器
动态规划一
动态规划一
|
7月前
|
存储 JavaScript 机器人
动态规划问题
动态规划问题
45 0
|
7月前
动态规划1
动态规划1
43 0
动态规划1
|
存储
【动态规划】
【动态规划】
|
定位技术
动态规划题:夺宝奇兵
动态规划题:夺宝奇兵
93 0
|
算法 前端开发 JavaScript
理解动态规划
理解动态规划
理解动态规划
|
机器学习/深度学习
朝题夕解之动态规划(7)
朝题夕解之动态规划(7)
136 0
朝题夕解之动态规划(7)