HDU 1160 FatMouse's Speed
阿新 • • 發佈:2018-12-03
原題目連結:HDU1160
分類
HDU 動態規劃 最長上升子序列
題意
給出老鼠的體重和速度
求最長的序列,使得體重遞增,速度遞減
想法
最長上升子序列變形
還有他加上了一個並查集求最長上升子序列路徑的東西
程式碼
/**
* Author: GatesMa
* Email: [email protected]
* Todo: ACM Training
* Date:2018/11/18
*/
#include <bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn = 1111;
int dp[maxn];
int pre[maxn];
struct A{
int w,s,id;
}E[maxn];
bool cmp(A a,A b){
return a.w > b.w;
}
int main()
{
int k=0;
while(scanf("%d%d",&E[k].w,&E[k].s)!=-1){
E[k].id=k+1;
k++;
}
memset(pre,-1,sizeof(pre));
sort(E, E+k,cmp);
for( int i=0; i < k;i++)
dp[i] = 1;
for(int i=0;i<k;i++){
for(int j=0;j < i;j++)
{
if(E[i].w < E[j].w && E[i].s > E[j].s){
if(dp[i] < dp[j] + 1){
dp[i] = dp[j] + 1;
pre[i] = j;
}
}
}
}
int ans=0;
int p;
for(int i=0;i<k;i++)
{
if(dp[i]>ans)
{
ans=dp[i];
p=i;
}
}
printf("%d\n",dp[p]);
while(p!=-1)
{
printf("%d\n",E[p].id);
p=pre[p];
}
return 0;
}