您的位置:首页 > 其它

FatMouse's Speed---hdu1160(简单dp)

2015-11-01 11:33 295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160

题意就是给你一些老鼠(编号1,2,3,4,5,6,7,8...)的体重和他们的速度然后求出最大的n满足

W[m[1]] < W[m[2]] < ... < W[m
]

and

S[m[1]] > S[m[2]] > ... > S[m
]

然后把原来的编号按照上面的序列输出来;

先把他们排序一下dp的时候记录一下路径;

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 1550
#define INF 0xffffff
struct node
{
int w, s, id;
}a
;
int cmp(node p, node q)
{
if(p.w!=q.w)
return p.w<q.w;
return p.s>q.s;
}
int main()
{
int n=0, dp
, pre
;
///freopen("in.txt", "r", stdin);
while(scanf("%d%d", &a
.w, &a
.s)!=EOF)
{
a
.id=n+1;
n++;
}
sort(a, a+n, cmp);
memset(dp, 0, sizeof(dp));
memset(pre, -1, sizeof(pre));
int Max = 0;
int Index = -1;
for(int i=0; i<n; i++)
{
dp[i]=1;
for(int j=0; j<i; j++)
{
if(a[j].w<a[i].w && a[j].s>a[i].s)
{
if(dp[j]+1>dp[i])
{
dp[i]=dp[j]+1;
pre[i]=j;
}
}
}
if(Max<dp[i])
{
Max = dp[i];
Index = i;
}
}
printf("%d\n", Max);
int b
={0},k=0;
for(int i=Index; i!=-1; i=pre[i])
{
b[k++]=a[i].id;
}
for(int i=k-1; i>=0; i--)
printf("%d\n", b[i]);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: