博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1270 数组的最大代价 思路:简单动态规划
阅读量:5132 次
发布时间:2019-06-13

本文共 928 字,大约阅读时间需要 3 分钟。

 

这题是看起来很复杂,但是换个思路就简单了的题目。

 

首先每个点要么取b[i],要么取1,因为取中间值毫无意义,不能增加最大代价S。

用一个二维数组做动态规划就很简单了。

 

dp[i][0]表示第i个点取1时(第0-i个点)得到的最大代价之和。

dp[i][1]表示第i个点取b[i]时(第0-i个点)得到的最大代价之和。

每一个都由前面两个推出。

 

#include 
using namespace std;int a[50005];int dp[50005][2]; // dp[][0]表示取1,dp[][1]表示取a[i] int main(){ int n; cin >> n; for(int i = 0;i < n; i++){ cin >> a[i]; } for(int i = 1;i < n; i++){ dp[i][0] = max(abs(1-1)+dp[i-1][0], // 第i个为1 ,第i-1个为1 abs(1-a[i-1])+dp[i-1][1]); // 第i个为1 ,第i-1个为a[i-1] dp[i][1] = max(abs(a[i]-1)+dp[i-1][0], // 第i个为a[i] ,第i-1个为1 abs(a[i]-a[i-1])+dp[i-1][1]);// 第i个为a[i] ,第i-1个为a[i-1] }// for(int i = 0;i < n; i++){// cout << dp[i][0] << " " << dp[i][1] << endl; // } cout << max(dp[n-1][0],dp[n-1][1]) << endl; //答案为最后一组中的最大的那个 return 0;}

 

转载于:https://www.cnblogs.com/zhangjiuding/p/7392757.html

你可能感兴趣的文章
ftp常用命令
查看>>
Leetcode:Pow(x,n)
查看>>
洛谷——P1176 路径计数2
查看>>
【转】 delphi --- WinSocket应用
查看>>
深入理解计算机系统(3.3)------操作数指示符和数据传送指令
查看>>
Java快排
查看>>
Hadoop综合大作业
查看>>
iOS中内存管理的问题——堆和栈
查看>>
AC日记——Roma and Poker codeforces 803e
查看>>
容易忘记的概念
查看>>
oracle数据导入/导出
查看>>
javaweb——总结
查看>>
Vmware 安装centos7与网络配置
查看>>
POJ3278
查看>>
LJL-Solution 清空页面所有值的 (2)
查看>>
Distinct Subsequences
查看>>
关于表单元素input的美化
查看>>
s3c2440 J-flash 烧写 NOR flash
查看>>
剑指Offer——把字符串转换成整数
查看>>
postgres常用命令
查看>>