贪心算法
来源:互联网 发布:魔力鸭淘宝旗舰店 编辑:程序博客网 时间:2024/06/06 15:48
题意:
给定一个数字串,按奇偶顺序挑选几个数字,+奇选的数字-偶选的数字,问怎样顺序挑选使最后的和最大。
思路:
O(n)贪心。
本质上其实是在对这个串进行分割,分割成若干段,每个段里面有一个最大值,一个最小值,且最大值在最小值前面。
O(N)去遍历,先找出最大值,然后找出最小值,就算完成一个子段。
至于最后的子段肯定是只有最大值,所以只需在读取的串最后面加一个数字0即可。
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #define Max(a,b) ((a)>(b)?(a):(b))
- #define Min(a,b) ((a)<(b)?(a):(b))
- using namespace std;
- const int N=150005;
- const int inf=(1<<30);
- int n,m;
- int a[N];
- void solve()
- {
- int flag=0;
- int mx=0,mn=inf;
- int i=1,ans=0;
- while(i<=n)
- {
- if(!flag)
- {
- if(a[i]>mx)
- {
- mx=a[i];
- }
- else
- {
- flag=1;
- }
- }
- if(flag)
- {
- if(a[i]<mn)
- {
- mn=a[i];
- }
- else
- {
- flag=0;
- ans+=(mx-mn);
- mx=0;
- mn=inf;
- continue;
- }
- }
- i++;
- }
- if(flag)
- ans+=mx;
- printf("%d\n",ans);
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- {
- scanf("%d",a+i);
- }
- a[++n]=0;
- solve();
- return 0;
- }
0 0
- 【贪心】贪心算法总结
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- O(n)时间找到栈的全局最小和队列的局部最小
- http://blog.csdn.net/yes_life/article/details/6831856 根文件系统设备号
- WeTest 接口自动化测试框架
- hdu 5423 Rikka with Tree DFS 或最短路
- ThinkPHP 中 获取最后一次执行sql语句 和变量调试
- 贪心算法
- C/C++专项练习 (二)
- 取消Eclipse对于某些代码的格式化
- 如何成为一个Linux内核开发者
- struts2的拦截器
- Swift中的问号?和感叹号!
- 背包问题
- 数据结构之单链表 C++实现
- 翻转课堂随想---个性化定制是革命,也是未来的主流