hdu 1160 정렬 + 최장 상승 서열
제목:
제목:
코드:
#include <set>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int LL;
const int M = 1009,INF = 0x3fffffff;
struct place {int x, y, z;} a[M];
pair<int, int> dp[M];
bool cmp(struct place a, struct place b) {
if(a.x == b.x) return a.y > b.y;
if(a.x < b.x) return true;
return false;
}
int main(void) {
//problem:hdu 1160 address:http://acm.hdu.edu.cn/showproblem.php?pid=1160
int n = 0;
while(cin >> a[n].x >> a[n].y) {
a[n].z = n + 1;
n++;
}
sort(a, a + n, cmp);
//for(int i = 0; i < n; i++) cout << a[i].x << " " << a[i].y << " " << a[i].z << endl;
for(int i = 0; i < n; i++) dp[i].first = 1;
int ans = 0, key = 0;
for(int i = 0; i < n; i++) {
for(int j = i - 1; j >= 0; j--) {
if(a[i].x != a[j].x && a[i].y < a[j].y && dp[i].first < dp[j].first + 1) {
dp[i].second = j;
dp[i].first = dp[j].first + 1;
}
}
//for(int ii = 0; ii < n; ii++) cout << dp[ii].first << " " << dp[ii].second << " ";
//cout << endl;
if(ans <= dp[i].first) {key = i; ans = dp[i].first;}
}
cout << ans << endl;
stack<int> s;
while(ans--) {
s.push(a[key].z);
key = dp[key].second;
}
while(!s.empty()) {
cout << s.top() << endl;
s.pop();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sql의 실행 순서가 어떻게 되는지 알려드릴게요.select*단지 당신이 Sql 대문에 들어서는 첫걸음일 뿐, 실제 업무에서 틀림없이 이렇게 간단하지 않을 것이다.우리 예를 하나 봅시다. 위의 요구 사항을 수행하려면 다음과 같이 Sql을 사용할 수 있습니다. 위의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.