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\n",ans);
        scanf("%d",&n);
      }
      return 0;
}

原文地址:https://www.cnblogs.com/yzxverygood/p/9304563.html

时间: 2024-11-08 23:57:31

poj2287 Tian Ji -- The Horse Racing的相关文章

POJ2287 Tian Ji -- The Horse Racing【贪心】

题目链接: http://poj.org/problem?id=2287 题目大意: 田忌和大王赛马,两个人各有N匹马,每匹马都有一个速度,跑的快的胜,慢的就输.田忌每赢一 把得200,平了不得钱,输了输200.每次大王先出马,田忌再出马.问:田忌最多能得多少钱. 思路: 贪心思想.现对田忌和大王的马进行排序.田忌的马速度从小到大排列,大王的马速度从大到小排 列.为了尽可能的赢,田忌就要采取以下策略: 1)尽可能用自己速度低的马去赢得大王速度快的马. 2)剩下赢不了的马,尽可能用自己的马和大王的

poj 2287 Tian Ji -- The Horse Racing

poj 2287 Tian Ji -- The Horse Racing 题意: 田忌赛马 如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢. 请问田忌最多能赢多少银子? 思路: 贪心: 如果当前最好的马可以胜齐王最好的马,那么让这两匹马比一场: 如果当前最差的马能胜齐王最差的马,那么让这两匹马比一场: 如果上面两个条件都不满足,那么让当前最差的马和齐王最好的马

hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】

思路:先按从小到大排序, 然后从最快的開始比(如果i, j 是最慢的一端, flag1, flag2是最快的一端 ),田的最快的大于king的 则比較,如果等于然后推断,有三种情况: 一:大于则比較,二等于在推断田的最慢的是不是比king的最快的慢,三小于则与king的最快的比較: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe

HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】

算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输,则连一条权为-200的边. 然而我们知道,二分图的最佳匹配算法的复杂度很高,无法满足N=2000的要求. 我们不妨用贪心思想来分析一下问题.因为田忌掌握有比赛的“主动权”,他总是根据齐王所出的马来分配自己的马,所以这里不妨认为齐王的出马顺序是按马的速度从高到低出的.由这样的假设,我们归纳出如下贪心

hdu1052 Tian Ji -- The Horse Racing

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17346    Accepted Submiss

(hdu step 1.3.3)Tian Ji -- The Horse Racing(田忌赛马)

题目: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4411 Accepted Submission(s): 1069   Problem Description Here is a famous story in Chinese history. "That was about 2

hdu1052——Tian Ji -- The Horse Racing

Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19020    Accepted Submission(s): 5557 Problem Description Here is a famous story in Chinese history. "That was about

Tian Ji -- The Horse Racing(杭电1052)(贪心)

Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18925    Accepted Submission(s): 5530 Problem Description Here is a famous story in Chinese history. "That was about

HDU Tian Ji -- The Horse Racing (贪心)

Tian Ji -- The Horse Racing Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 56   Accepted Submission(s) : 25 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Here is a