代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<array>
using namespace std;
int result = 0;
vector<int> ans;
int dfs(int x, int y, vector<vector<int>> &matrix, vector<vector<int>>& dp);
int maxi = 0;
int main()
{
int coinNums = 0, i = 0;
int time = 0, point = 0;
cin >> coinNums;
vector<int> b(11, 0);
int maxtime = 0;
vector<int> cur, cur1;
while (coinNums>i)
{
cin >> point >> time;
maxtime = maxtime<time ? time : maxtime;
cur.push_back(point);
cur1.push_back(time);
i++;
}
vector<vector<int>> matrix(maxtime + 1, b);
// vector<int> b(matrix[0].size(),0);
vector<vector<int>> dp(matrix.size()+1, b);
for (int i = 0; i<coinNums; i++)
{
matrix[cur1[i]][cur[i]] += 1;
}
cout<< dfs(0, 5, matrix, dp)<<endl;
return 0;
}
int dfs(int x, int y, vector<vector<int>> &matrix, vector<vector<int>> &dp)
{
if (x ==( matrix.size()-1))
{
maxi=maxi>dp[x][y]?maxi: dp[x][y];
return maxi;
}
vector<vector<int>> dirs = { { 1,-1 },{ 1,0 },{ 1,1 } };
for (auto &dir : dirs)
{
int xx = x + dir[0]; int yy = y + dir[1];
if ( yy>=matrix[0].size() || yy<0) continue;
dp[xx][yy] = dp[x][y] + matrix[xx][yy];
dfs(xx, yy, matrix, dp);
}
return maxi;
}