zoukankan      html  css  js  c++  java
  • poj 2287 Tian Ji The Horse Racing 动态规划上贪心

      

        1、如果田忌剩下的马中最强的马都赢不了齐王剩下的最强的马,那么应该用最差的一匹马去输给齐王最强的马。

        2、如果田忌剩下的马中最强的马可以赢齐王剩下的最强的马,那就用这匹马去赢齐王剩下的最强的马。

        3、如果田忌剩下的马中最强的马和齐王剩下的最强的马打平的话,可以选择打平或者用最差的马输掉比赛。

        

        设  表示齐王按从强到弱的顺序出马和田忌进行了i场比赛之后,从“头”取了j匹较强的马,从“尾”取了i-j匹较弱的马,所能够得到的最大盈利。    

        状态转移方程如下:

            

        注意边界条件的判定 

    View Code
    // Code by yefeng1627
    // Time 2013-1-17
    #include<stdio.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    
    const int N = 1010;
    const int inf = 0x3fffffff;
    int A[N],B[N], n;
    int dp[N][N], G[N][N];
    
    int cmp(int a,int b)
    {    return a > b;    }
    int main()
    {
        while( scanf("%d", &n) , n )
        {
            for(int i = 1; i <= n; i++)
                scanf("%d", &A[i]);
            for(int i = 1; i <= n; i++)
                scanf("%d", &B[i]);
            sort( A+1, A+n+1, cmp);
            sort( B+1, B+n+1, cmp);
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= n; j++)
                {
                    if( A[i] > B[j] ) G[i][j] = 200;
                    else if( A[i] == B[j] ) G[i][j] = 0;
                    else    G[i][j] = -200;
                }
            for(int i = 0; i <= n; i++)
                for(int j = 0; j <= n; j++)
                    dp[i][j] = -inf;
            dp[0][0] = 0;
            int ans = -inf;
            for(int i = 1; i <= n; i++)
                for(int j = 0; j <= i; j++)
                {
                    if( i-1 >= j ) 
                        dp[i][j] = max( dp[i][j], dp[i-1][j]+ G[ n+1-(i-j) ][i] );
                    if( j > 0 )    
                        dp[i][j] = max( dp[i][j], dp[i-1][j-1] + G[j][i] );
                }
            for(int i = 0; i <= n; i++)
                ans = max( ans, dp[n][i] );
            printf("%d\n", ans );    
        }
        return 0;
    }
  • 相关阅读:
    2017 多校联合训练 8 题解
    2017 多校联合训练 7 题解
    2017 多校联合训练 6 题解
    2017 多校联合训练 5 题解
    2017 多校联合训练 4 题解
    windows 安装python
    pygame 使用
    python 发布
    面向对象的思维方法
    python 基础
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2864253.html
Copyright © 2011-2022 走看看