您的位置:首页 > 其它

UVA - 10131 - Is Bigger Smarter? (动态规划,LIS)

2014-03-09 21:10 477 查看
点击打开链接

给出一系列大象的体重和智商,求在体重升序的排序中找出智商的最大下降序列,并输出序列。

先排序,再用LIS的动规。

WA了一次,因为输出路径的时候出了点问题。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 1001, MAX_W = 10001, MAX_S = 10001, INF = 0x3f3f3f3f;
int N = 0;
int d[MAX_N], fa[MAX_N];
struct E
{
int n, w, s;
bool operator<(const E e) const
{
return this->w < e.w;
}
}e[MAX_N];
void print(int x)
{
if(x == -1)
return;
printf("%d\n", e[x].n+1);
print(fa[x]);
}
void solve()
{
int ans = -1, mi = -1;
for(int i = N-1; i >= 0; i--)
{
d[i] = 1;
fa[i] = -1;
for(int j = N-1; j > i; j--)
if(e[j].w != e[i].w && e[j].s < e[i].s && d[j]+1 > d[i])
{
d[i] = d[j]+1;
fa[i] = j;
}
if(ans < d[i])
{
ans = d[i];
mi = i;
}
}
printf("%d\n", ans);
print(mi);
}
int main()
{
//freopen("in.txt", "r", stdin);
while(scanf("%d%d", &e
.w, &e
.s) != EOF) e
.n = N++;
sort(e, e+N);
solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 LCS