zoukankan      html  css  js  c++  java
  • 洛谷P3507 [POI2010]GRA-The Minima Game

    题目

    DP,及DP的优化。

    这个题显然是一个DP,状态也比较好定义,

    定义dp[i]表示双方总共取i个数时,所得到的最大差值。

    然后可以得出状态转移方程,即 (dp[i]=max(data[j]-dp[j-1]);j<=i) 时间复杂度为(O(n^2))

    然后可以简化一下转移方程,即(dp[i]=max(dp[i-1],data[i]-dp[i-1]))可得到(O(n))的时间复杂度。

    该方程的意思就是第i个数时得到的最大差值,如果单独取,那就是(data[i]-dp[i-1]),如果和前(i-1)个数在同一时刻取,那结果是(dp[i-1])

    #include <bits/stdc++.h> 
    #define N 1010010
    #define int long long
    using namespace std;
    int n, data[N], dp[N];//dp[i]表示双方共取了i个数,所得到的最大差值。 
    bool cmp(int a, int b) {
    	return a > b;
    }   
    signed main()
    {   
     	scanf("%lld", &n);
     	for (int i = 1; i <= n; i++)
     		scanf("%lld", &data[i]);
     	sort(data + 1, data + 1 + n); 
     	for (int i = 1; i <= n; i++)
     		dp[i] = max(dp[i - 1], data[i] - dp[i - 1]);
     	printf("%lld", dp[n]);
       	return 0;
    }   
    /*  
    3	
    1 3 1 
    2	
    */  
    
  • 相关阅读:
    第05组 Beta版本演示
    第05组 Beta冲刺(4/4)
    第05组 Beta冲刺(3/4)
    RogrePirates Scrum Meeting 博客汇总
    Beta阶段事后分析
    Beta阶段项目展示
    Beta阶段发布说明
    Beta阶段测试报告
    Beta阶段第十次会议
    Beta阶段第九次会议
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/11585344.html
Copyright © 2011-2022 走看看