欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【算法手记12】DP25 删除相邻数字的最大分数

【算法手记12】DP25 删除相邻数字的最大分数

2025/4/18 3:33:10 来源:https://blog.csdn.net/weixin_72357342/article/details/147076495  浏览:    关键词:【算法手记12】DP25 删除相邻数字的最大分数

🦄个人主页:修修修也

🎏所属专栏:刷题

⚙️操作环境:牛客网

目录

一.DP25 删除相邻数字的最大分数

题目详情:

题目思路:

解题代码:

结语


一.DP25 删除相邻数字的最大分数

牛客网题目链接(点击即可跳转):DP25 删除相邻数字的最大分数

题目详情:

本题详情如下图:


题目思路:

本题解题思路如下:

        这道题首先我们要处理一下原数据,因为原数组并不方便我们操作相邻的两个数,所以我们创建一个哈希表来统计一下所有数它出现的次数以及它本身相乘的"权值".

        然后还是利用动态规划解题,本题特殊的点在于需要填两个动态规划dp表,一个是选i位置数的dp表f[i], 一个是选i位置数的dp表g[i]. 这两个dp表的递推方程分别如下:

  • f[i] = hash[i] + g[i-1]    (表示选i位置的价值 = i位置本身权重+不选i-1位置的数的最大利益)
  • g[i] = max(g[i-1], f[i-1])  (不选i位置时价值 = 选i-1位置 和 不选i-1位置 里大的那个)

解题代码:

本题解题代码如下

#include <iostream>
using namespace std;int main() 
{int n;cin>>n;int hash[10001]={0};for(int i=0;i<n;i++){int tmp;cin>>tmp;hash[tmp]+=tmp;}long long f[10001]={0};long long g[10001]={0};for(int i=1;i<10001;i++){f[i]=hash[i]+g[i-1];g[i]=max(g[i-1],f[i-1]);}cout<<max(f[10000],g[10000]);
}

结语

        说点啥好呢...感觉越来越好了?坚持了两周时间每天学2h算法感觉一下子编程能力就慢慢康复了,很正确的决定,继续加油吧! 也希望能借助规律的练习来从混乱的海投生活中找到一丝规整混乱的把手.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词