結果
| 問題 |
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;
}