题目链接:http://poj.org/problem?id=2287
题目大意:田忌赛马。
题目思路:
Ø 1、如果田忌剩下的马中最强的马都赢不了齐王剩下的最强的马,那么应该用最差的一匹马去输给齐王最强的马。
Ø 2、如果田忌剩下的马中最强的马可以赢齐王剩下的最强的马,那就用这匹马去赢齐王剩下的最强的马。
Ø 3、如果田忌剩下的马中最强的马和齐王剩下的最强的马打平的话,可以选择打平或者用最差的马输掉比赛。
在第三步的时候出现选择,我们需要用dp,定义dp[i][j]为在前i场比赛中,田忌派出j匹好马所能得到的最大收益。则转移方程为dp[i][j]=max(dp[i-1][j-1]+g[j][i],dp[i-1][j]+g[n-i+j+1][i]);(因为田忌每次不是选择好马就是选择劣马)。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 110
inline int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
bool cmp(int a,int b)
{
return a>b;
}
int n,num;
int a[1010],b[1010],dp[1010][1010],g[1010][1010];
int main()
{
int i,j;
while(scanf("%d",&n),n)
{
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<=n;j++)
{
if(a[i]<b[j])
g[i][j]=-1;
else if(a[i]==b[j])
g[i][j]=0;
else
g[i][j]=1;
}
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
dp[i][j]=-inf;
dp[0][0]=0;
for(i=1;i<=n;i++)
for(j=0;j<=i;j++)
{
if(j>=1)
dp[i][j]=max(dp[i-1][j-1]+g[j][i],dp[i-1][j]+g[n-i+j+1][i]);
else
dp[i][j]=dp[i-1][j]+g[n-i+j+1][i];
}
int ans=-inf;
for(i=0;i<=n;i++)
{
ans=max(dp[n][i],ans);
}
printf("%d\n",ans*200);
}
}
分享到:
相关推荐
POJ水题集-----50道左右-----增加自信啊..
北大POJ1258-Agri-Net【Prim】 解题报告+AC代码
北大POJ3292-Semi-prime H-numbers 解题报告+AC代码
北大POJ2299-Ultra-QuickSort 解题报告+AC代码
poj题目分类--acmer做题极有用资源
非常全的poj答案库 1164-1874 1000-4007
北大POJ1002-487-3279【Hash+Qsort】 解题报告+AC代码
poj 3131 Cubic Eight-Puzzle.md
poj 2196 Specialized Four-Digit Numbers.md
poj平台有关数据结构题的Java源码 1159 1276 2406 2502 2509 2513 2533 2778 3176
很有用的解题报告。。是acm初级提高的必备资料。。。。。
#include #define PI 3.1415926 int main() { int n,i,m,arr[100]; float x,y,halfcircle; scanf("%d",&n); ... printf("Property %d: This property will begin eroding in year %d.\n",i,arr[i]);...
北大POJ3253-POJ3253-Fence Repair【STL优先队列】 解题报告+AC代码
北大POJ1426-Find The Multiple【BFS+同余模】 解题报告+AC代码
POJ北大在线测评系统离线题库,里面包含1002-3422题,可以离线刷题。
北大POJ3239-Solution to the n Queens Puzzle 解题报告+AC代码
POJ3211--Washing Clothes
人们熟悉的四则运算表达式称为中缀表达式,例如(23+34*45/(5+6+7))。在程序设计语言中,可以利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到...
poj 1690 Your-Term-Project.md
poj 1240 Pre-Post-erous!.md