zoukankan      html  css  js  c++  java
  • poj2287 Tian Ji -- The Horse Racing

    传送门

    分析

    这个题和传统的田忌赛马不一样的地方就是多了平局情况,所有我们不难想到要用dp。我们先将两人的马均降序排列,用dpij表示考虑前i匹马,田忌有几匹马是按从大到小的顺序从头取的(剩下的是从尾部取的)。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    #define sp cout<<"---------------------------------------------------"<<endl;
    int dp[1100][1100],a[1100],b[1100];
    inline bool cmp(int x,int y){
          return x>y;
    }
    inline int c(int x,int y){
          if(x>y)return 200;
            else if(x<y)return -200;
          return 0;
    }
    int main(){
          int n,i,j;
          scanf("%d",&n);
          while(n!=0){
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)scanf("%d",&a[i]);
            for(i=1;i<=n;i++)scanf("%d",&b[i]);
            sort(a+1,a+n+1,cmp);
            sort(b+1,b+n+1,cmp);
            for(i=1;i<=n;i++){
              for(j=1;j<i;j++)
                dp[i][j]=max(dp[i-1][j-1]+c(a[j],b[i]),dp[i-1][j]+c(a[n-(i-j-1)],b[i]));
              dp[i][0]=dp[i-1][0]+c(a[n-i+1],b[i]);
              dp[i][i]=dp[i-1][i-1]+c(a[i],b[i]);
            }   
            int ans=-1000000007;
            for(i=0;i<=n;i++)
              ans=max(ans,dp[n][i]);
            printf("%d
    ",ans);
            scanf("%d",&n);
          }
          return 0;
    }
  • 相关阅读:
    un-MIS:百科
    CSS:CSS 颜色十六进制值
    CSS:CSS 颜色名
    CSS:CSS 合法颜色值
    大端法、小端法、网络字节序
    Java实现 洛谷 P1028 数的计算
    Java实现 洛谷 P1028 数的计算
    Java实现 洛谷 P1036 选数
    Java实现 洛谷 P1036 选数
    Java实现 洛谷 P1036 选数
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9304563.html
Copyright © 2011-2022 走看看