题目大意:给定田忌和齐威王n匹马的速度,田忌赢一场得200银子,输一局输200银子,平局则无事发生,齐威王马匹按照速度从大到小上场,求田忌的最大收益

思路:区间dp

首先明确,因为齐威王的马按照速度大小上场,对田忌马匹排序后。

如果此时田忌速度最大的马能赢就上场,赢不了就尽量让速度小的马去比,什么时候会平局呢?平局发生在田忌此时速度最大的马匹去和齐威王的马比赛的情况下。

所以,总结一下,田忌每次派出的不是速度最大就是最小的马匹。

dp[i][j]表示田忌派出区间[i,j]的马匹的最大收益,每次改变的只是区间两端,进行区间的延伸即可

dp[i][j] = max(dp[i][j-1]+cost(i,k) , dp[i+1][j] + cost(j,k))其中k是齐威王的马匹

我们倒着考虑问题,齐威王只剩一匹马……还剩n匹,小区间维护到大区间,因为正着想问题的时候区间肯定是每次从两端减少的,所以从小区间维护到大区间也肯定是向两端延伸的。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
using namespace std;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define pb push_back
#define IOS ios::sync_with_stdio(false)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define all(v) v.begin(),v.end()
typedef long long ll;
const int N=1e3+10;
int a[N],b[N];
int dp[N][N];
bool cmp(int x,int y) {return x > y;}
int cost(int i, int k)
{if( a[i] > b[k]) return 200;else if( a[i] == b[k] ) return 0;else return -200;
}
signed main()
{// !!!
//        freopen("data.txt","r",stdin);//    !!!IOS;int n;while( cin>>n ){if( !n ) break;mst(dp,0);_for(i,1,n) cin>>a[i];_for(i,1,n) cin>>b[i];sort(a+1,a+1+n,cmp);sort(b+1,b+1+n,cmp);for(int len=1 ;len<=n ;len++){if( len==1 )_for(i,1,n) dp[i][i]=cost(i,n);else{for(int i=1 ,j=len+i-1 ;j<=n ;i++,j++){dp[i][j] = max(dp[i][j-1]+cost(j,n-len+1) , dp[i+1][j]+cost(i,n-len+1));}}}cout<<dp[1][n]<<endl;}
}

poj2287田忌赛马相关推荐

  1. POJ2287 田忌赛马---贪心算法

    田忌赛马 题目详见http://poj.org/problem?id=2287 田忌赛马大家都听过,可是如果不是上中下三等马,而是很多匹马,优劣有很多种分类,就不仅仅是321的问题了. 这个很明显就是 ...

  2. poj2287 田忌赛马

    贪心 1.田最慢的马和齐最慢的马比,赢则+1 2.田最快的马和齐最快的马比,赢则+1 3.用田最慢的马和齐最快的马比,输则-1. 注意:打平的情况 最后在判断田最快=齐最快,田最慢=齐最慢的情况时想当 ...

  3. POJ 2287 田忌赛马(贪心)

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id=2287 1 ...

  4. php的 静态变量,PHP之static静态变量详解

    在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料. static用法如下: 1.static 放在函数内部修饰变量 2.s ...

  5. 田忌赛马贪心算法_田忌赛马 贪心算法

    算法实验课回顾 田忌赛马 问题描述: 你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以 ...

  6. [ZJOI2008]泡泡堂(田忌赛马贪心)

    problem 洛谷链接 solution 田忌赛马孪生兄弟. 浙江选手最坏情况就是外省最好情况,所以本质上两个子问题是同一个做法. 相信所有人都是读完题后就有田忌赛马的思想了.(如果还没上过小学语文 ...

  7. 田忌赛马c语言程序设计,还是杭电1052田忌赛马

    已结贴√ 问题点数:20 回复次数:2 还是杭电1052田忌赛马 //昨天那个算法漏洞挺大,但我重新构思了,但运行到312ms还是wa了.我测试了许多数据,结果是对的,郁闷了,谁能救救我啊? #inc ...

  8. 可以使用田忌赛马类贪心问题的前提(或说 如何判断题目符合田忌赛马类贪心问题)

    前提就是,首先,需要两个数组!!两个数组!!两个数组!!才可以考虑这个! 其次,A和B这两个数组的个数是相同的.也正因为如此,所以从大到小排序或者从小到大排序都可以解出来,因为他们都是一一对应的关系, ...

  9. cf#401(Div. 2)B. Game of Credit Card(田忌赛马类贪心)

    题干: After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle b ...

  10. [sicily]【1001】 会议安排(田忌赛马类贪心)

    题干: N个会议要同时举行,参会人数分别为A[0], A[1], ...,A[N-1]. 现有M个会议室,会议室可容纳人数分别为B[0], B[1], ...,B[M-1]. 当A[i]<=B[ ...

最新文章

  1. 动态规划:连续子数组的最大和
  2. PHP中三元运算符的用法_php中三元运算符用法_PHP教程
  3. 单手撸了个springboot+mybatis+druid
  4. gravity 时序图绘制,改
  5. JAVA菜鸟入门HelloWorld
  6. 苏宁易购第二次债券购回基本方案:购回资金总额20亿元
  7. c语言读取excel表格_利用pandas处理excel表格
  8. JAVA基础系列:Arrays.binarySearch二分查找
  9. [English] notes
  10. php图片遍历,php – 如何遍历图像的所有像素?
  11. 【数据库】“SQLite”+“DEV-CPP”实现C/C++嵌入式编程操作数据库
  12. 网上的PS把图片变清晰的原理
  13. 小妙招:教你如何查询获取企业工商数据
  14. java 词云_在线词云生成工具
  15. VA_X的EnterKey解决
  16. I.MX8M mini物联网开发板框架及屏幕接口详解
  17. python--1、入门
  18. Lumia 1020 诞生:诺基亚拍照技术的一次狂欢
  19. XAG一键并轨XRP媒体报道
  20. PHP爬虫,提取网站中的关键词,用一次正则匹配,然后再PHP数组的操作

热门文章

  1. objectc:dictionary使用
  2. 个人空间岁末大回报活动12月25日获奖名单
  3. html5制作电子日历,基于HTML5的日历制作软件
  4. 微信分享代码,朋友圈分享代码
  5. GIS真正的魅力在哪?
  6. 简单好听的宝宝小名大全
  7. 宁夏大学计算机科学与技术排名,2016宁夏自治区大学各学科门类最佳专业排行榜...
  8. 虚拟机中ip地址总是自动变化解决办法
  9. Empty paragraph passed to @param command
  10. 恒指赵鑫:7.24今日恒指喊单记录与小结