結果
問題 | No.1948 足し算するだけのパズルゲーム(1) |
ユーザー |
👑 |
提出日時 | 2023-06-30 16:53:00 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 124 ms / 2,000 ms |
コード長 | 1,481 bytes |
コンパイル時間 | 717 ms |
コンパイル使用メモリ | 78,516 KB |
最終ジャッジ日時 | 2025-02-15 03:22:58 |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
ソースコード
#include <iostream> #include <vector> #include <queue> using namespace std; struct st{ int h,w; int a; bool re; }; long long dp[510][510][2]; int main(){ int h,w;cin>>h>>w; vector<vector<long long>> A(h,vector<long long>(w)); for(int i = 0; h > i; i++){ for(int j = 0; w > j; j++){ cin>>A[i][j]; dp[i][j][0] = dp[i][j][1] = -1; } } dp[0][0][0] = A[0][0]; for(int i = 0; h > i; i++){ for(int j = 0; w > j; j++){ if(i){ if(A[i][j] >= dp[i-1][j][0]){ if(A[i][j] < dp[i-1][j][1]){ dp[i][j][1] = max(dp[i][j][1], dp[i-1][j][1]+A[i][j]); } if(!(i+1 == h && j+1 == w)){ dp[i][j][1] = max(dp[i][j][1], dp[i-1][j][0]); } }else{ if(dp[i-1][j][1] != -1)dp[i][j][1] = max(dp[i][j][1], dp[i-1][j][1]+A[i][j]); dp[i][j][0] = max(dp[i][j][0], dp[i-1][j][0]+A[i][j]); } } if(j){ if(A[i][j] >= dp[i][j-1][0]){ if(A[i][j] < dp[i][j-1][1]){ dp[i][j][1] = max(dp[i][j][1], dp[i][j-1][1]+A[i][j]); } if(!(i+1 == h && j+1 == w)){ dp[i][j][1] = max(dp[i][j][1], dp[i][j-1][0]); } }else{ if(dp[i][j-1][1] != -1)dp[i][j][1] = max(dp[i][j][1], dp[i][j-1][1]+A[i][j]); dp[i][j][0] = max(dp[i][j][0], dp[i][j-1][0]+A[i][j]); } } } } cout << (dp[h-1][w-1][0] != -1 || dp[h-1][w-1][1] != -1 ? "Yes" : "No") << endl; }