n, k = map(int, input().split())points = set()for i in range(n): x, y = map(int, input().split()) points.add((x, y))dp = [[0] * (max(p[1] for p in points) + 2) for _ in range(max(p[0] for p in points) + 2)]for x, y in points: dp[x][y] = 1for i in range(max(p[0] for p in points), 0, -1): for j in range(max(p[1] for p in points), 0, -1): if (i, j) not in points: dp[i][j] = max(dp[i+1][j], dp[i][j+1])ans = max(max(row) for row in dp)print(ans) 转C++
时间: 2024-01-21 16:04:19 浏览: 35
以下是将 Python 代码转换为等效的 C++ 代码:
```c++
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, k;
cin >> n >> k;
set<pair<int, int>> points;
for (int i = 0; i < n; i++)
{
int x, y;
cin >> x >> y;
points.insert({x, y});
}
int max_x = max_element(points.begin(), points.end(), [](auto &a, auto &b) { return a.first < b.first; })->first;
int max_y = max_element(points.begin(), points.end(), [](auto &a, auto &b) { return a.second < b.second; })->second;
vector<vector<int>> dp(max_x + 2, vector<int>(max_y + 2));
for (const auto &p : points)
dp[p.first][p.second] = 1;
for (int i = max_x; i >= 1; i--)
{
for (int j = max_y; j >= 1; j--)
{
if (!points.count({i, j}))
{
dp[i][j] = max(dp[i + 1][j], dp[i][j + 1]);
}
}
}
int ans = *max_element(dp[1].begin() + 1, dp[1].end());
cout << ans << endl;
return 0;
}
```