命名很简单的一道最长递减子序列,UVA上的题就是麻烦,还要处理这七七八八的其它东西,不过练练coding能力也还蛮好的。
#include <stdio.h>
#include <algorithm>
#define N 1005
struct elephant
{
int id, wt, iq;
}e[N];
int b[N], pre[N];
int cmp(elephant a, elephant b)
{
return a.wt < b.wt;
}
int main()
{
int n = 0, cur, ans, stack[N], top = 0;
while(~scanf("%d %d", &e[n].wt, &e[n].iq))
{
b[n] = 1;
pre[n] = 0;
e[n].id = n;
n++;
}
std::sort(e, e + n, cmp);
// for(int i = 0; i < n; i++)
// printf("%d %d %d\n", e[i].wt, e[i].iq, e[i].id);
ans = 1;
for(int i = 1; i < n; i++)
{
for(int j = 0; j < i; j++)
{
if(e[i].wt > e[j].wt && e[i].iq < e[j].iq && b[i] <= b[j])
{
b[i] = b[j] + 1;
pre[i] = j;
}
}
if(b[i] > ans)
{
cur = i;
ans = b[i];
}
}
printf("%d\n", ans);
while(cur)
{
stack[top++] = e[cur].id + 1;
cur = pre[cur];
}
for(int i = top - 1; i >= 0; i--)
printf("%d\n", stack[i]);
return 0;
}