Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- using namespace std;
- int main(){
- int n,m=0;
- cin >> n;
- cin >> m;
- int**grid = new int*[n]();
- for(int i =0;i<n;i++)
- {
- grid[i] = new int[n]();
- for(int j =0;j<n;j++)
- {
- cin >> grid[i][j];
- }
- }
- // int** charms = new int*[m]();
- int* safe = new int[n*n]();
- for(int i =0;i<m;i++)
- {
- int* charms = new int[3]();
- cin >> charms[0];
- cin >> charms[1];
- cin >> charms[2];
- for(int x = -charms[2]; x <= charms[2]; x++)
- {
- for(int y = charms[2] - abs(x); y >= -(charms[2] - abs(x)); y-- )
- {
- int x1 = charms[0] + x;
- int y1 = charms[1] + y;
- if(x1 > 0 && y1 > 0 && x1 < n+1 && y1 < n+1)
- safe[(x1-1)*n + y1 - 1] = 1;
- }
- }
- }
- int** dp = new int*[n*n];
- int out = 0;
- if(safe[0] == 1)
- {
- for(int i =0;i<n;i++)
- {
- for(int j =0;j<n;j++)
- {
- dp[i* (n) +j] = new int[2]();
- if(i==0 && j== 0 && safe[0] == 1)
- {
- dp[0,0] = grid[0,0];
- dp[0,1] = grid[0,0];
- }
- if(safe[i *n +j] == 1)
- {
- if(j>0 && safe[i *n +j-1] == 1)
- dp[i*n + j][0] = max(dp[i*n + j-1][0], dp[i*n + j-1][1]) != 0 ? grid[i][j] + max(dp[i*n + j-1][0], dp[i*n + j-1][1]) : 0;
- if(i>0 && safe[(i -1)*n +j] == 1)
- dp[i*n + j][1] = max(dp[(i-1)*n + j][0], dp[(i-1)*n + j][1]) != 0 ? grid[i][j] + max(dp[(i-1)*n + j][0], dp[(i-1)*n + j][1]) : 0;
- // cout << i<<","<<j<<":" << dp[i*n + j][0]<<":"<< dp[i*n + j][1]<<"\n";
- }
- }
- }
- out = max(dp[n*n - 1][0], dp[n*n - 1][1]);
- }
- if(out == 0)
- cout << "NO\n";
- else{
- cout << "YES\n";
- cout << out;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement