当前位置:   article > 正文

第十四届蓝桥杯省赛PythonB组_第十四届蓝桥杯省赛python b组

第十四届蓝桥杯省赛python b组

思路:

// f[i] 定义为从前 i 个中选的最大价值
// 如果不选,那么从前 i - 1 转移而来 f[i] = f[i - 1];
// 如果选,那么 i - 1不能选,从前 i - 2 转移而来 ,所以 f[i - 2] + str[i] - 'a' + 1
// 至于为什么不是从前 i - 2 , i - 3 ... 0中的某个转移而
// 本来是需要 for(int i = 0 ; i <= i - 2 ; i ++) 循环一边的
// 因为我们在枚举到 i 时,i - 2 其实已经得到最小值了,若是从 i - 2 转移,一定要比从 i - 3转移更优
// 因为 如果从i - 3 转移更优的话,f[i - 2] 一定是等于 f[i - 3] 的,因为每次都得判断 i 
// 如果 i - 3 不是最优的,也就是需要 i - 2,那么从f[i - 2]转移更优一点
// 故综上所述,i - 2 一定更优,所以直接从 i - 2 转移即可

 

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1e6 + 10;
  6. char str[N];
  7. int f[N];
  8. int main()
  9. {
  10. cin >> str + 1;
  11. int n = strlen(str + 1);
  12. memset(f , -0x3f , sizeof f);
  13. f[0] = 0;
  14. int res = -1;
  15. for(int i = 1 ;i <= n ; i ++)
  16. {
  17. f[i] = max(f[i - 1] , f[i - 2] + str[i] - 'a' + 1);
  18. res = max(res , f[i]);
  19. }
  20. cout << res << endl;
  21. return 0;
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/447267
推荐阅读
相关标签
  

闽ICP备14008679号