zoukankan      html  css  js  c++  java
  • codeforces 484D Kindergarten (dp、贪心)

    题意:给n个数,分成若干个连续组,每组获益为max-min,输出最大获益。

    参考:http://blog.csdn.net/keshuai19940722/article/details/40873581

    参考的链接里说得很明白了,我的dp[i][0]是升序,dp[i][1]是降序,习惯而已。

    这题关键点就是,如果a[i-1]<a[i]>a[i+1],显然3个分开(a[i]归左或右)不比在一起差。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <ctime>
    using namespace std;
    
    #define ll long long
    #define MP make_pair
    
    #define inf 1e9
    #define eps 1e-8
    
    #define maxn 1010000
    
    int a[maxn];
    ll dp[maxn][2];
    int main(){
    	int n;
    	while(~scanf("%d",&n)){
    		for(int i=0;i<n;++i) scanf("%d",a+i);
    		dp[0][0]=dp[0][1]=0;
    		for(int i=1;i<n;++i){
    			if(a[i-1]<a[i]){
    				dp[i][0] = max(dp[i-1][0]+a[i]-a[i-1], dp[i-1][1]);
    				dp[i][1] = max(dp[i-1][0], dp[i-1][1]);
    			}else {
    				dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
    				dp[i][1] = max(dp[i-1][1]+a[i-1]-a[i], dp[i-1][0]);
    			}
    		}
    		printf("%I64d
    ", max(dp[n-1][0], dp[n-1][1]));
    	}
    	return 0;
    }
    
  • 相关阅读:
    根据坐标点画图形
    js 解析geojson格式
    devexpress 安装
    DataTable 获取列名
    ADO.NET 注册
    css:outline
    javascript函数sort
    引用类型-2015/10/06
    2015-11-02-js
    jquery
  • 原文地址:https://www.cnblogs.com/nextbin/p/4085674.html
Copyright © 2011-2022 走看看