1 条题解

  • 1
    @ 2023-7-11 20:43:28

    简单的dp题

    # include <bits/stdc++.h>
    using namespace std;
    const int N = 5e3 + 10;
    int n, w[N], h[N], a[N], dp[N];
    int init(int p) {
    	if (dp[p]) {
            return dp[p];
        }
        dp[p] = 1;
    	for (int i = 0; i <= n; i++) {
    		if (w[p] < w[i] && h[p] < h[i] && dp[p] < init(i) + 1) {
    			dp[p] = dp[i] + 1;
    			a[p] = i;
    		}
        }
    	return dp[p];
    }
    int main() {
    	scanf("%d", &n);
    	for (int i = 0; i <= n; i++) {
    		scanf("%d%d", &w[i], &h[i]);
    		a[i] = -1;
    	}
    	init(0);
        printf("%d\n", dp[0] - 1);
    	for (int i = a[0]; i != -1; i = a[i]) {
    		printf("%d ", i);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    7089
    时间
    1000ms
    内存
    64MiB
    难度
    5
    标签
    递交数
    4
    已通过
    3
    上传者