| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
AC代码,动规#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <stack>
#include <algorithm>
#include <functional>
#include <iostream>
#include <cmath>
#include <queue>
using namespace std;
const int MAX_N = 510;
const int MAX_D = 1010;
int boxes[MAX_N][MAX_D];
int max_num[MAX_N];
vector<int> graph[MAX_N];
inline bool CanPut(int i, int j, int D) {
for (int k = 0; k < D; ++k) {
if (boxes[i][k] >= boxes[j][k]) {
return false;
}
}
return true;
}
int Dfs(int start) {
if (max_num[start] >= 0) {
return max_num[start];
}
int max_v = 0;
for (int i = 0; i < graph[start].size(); ++i) {
int succ = graph[start][i];
int num = Dfs(succ);
if (num > max_v) {
max_v = num;
}
}
return max_num[start] = max_v + 1;
}
int main() {
int N, D;
while (scanf("%d %d", &N, &D) != EOF) {
for (int i = 0; i <= N; ++i) {
for (int j = 0; j < D; ++j) {
scanf("%d", &boxes[i][j]);
}
sort(boxes[i], boxes[i] + D);
}
for (int i = 0; i <= N; ++i) {
graph[i].clear();
}
for (int i = 0; i <= N; ++i) {
for (int j = i + 1; j <= N; ++j) {
if (CanPut(i, j, D)) {
graph[i].push_back(j);
} else if (CanPut(j, i, D)) {
graph[j].push_back(i); // 刚开始这里漏了,WA了一次
}
}
}
memset(max_num, -1, sizeof(max_num));
int num = Dfs(0);
if (num == 1) {
printf("Please look for another gift shop!\n");
} else {
printf("%d\n", num - 1);
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator