🦄个人主页:修修修也
🎏所属专栏:刷题
⚙️操作环境:牛客网
目录
一.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算法感觉一下子编程能力就慢慢康复了,很正确的决定,继续加油吧! 也希望能借助规律的练习来从混乱的海投生活中找到一丝规整混乱的把手.