結果
| 問題 |
No.1948 足し算するだけのパズルゲーム(1)
|
| コンテスト | |
| ユーザー |
pengin_2000
|
| 提出日時 | 2022-07-21 13:44:59 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 35 ms / 2,000 ms |
| コード長 | 1,161 bytes |
| コンパイル時間 | 269 ms |
| コンパイル使用メモリ | 30,976 KB |
| 実行使用メモリ | 7,804 KB |
| 最終ジャッジ日時 | 2024-07-02 18:02:48 |
| 合計ジャッジ時間 | 3,265 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
#include<stdio.h>
long long int max(long long int a, long long int b)
{
if (a > b)
return a;
else
return b;
}
long long int a[502][502];
long long int dp[2][502][502];
int main()
{
int h, w;
scanf("%d %d", &h, &w);
int i, j;
for (i = 0; i < h; i++)
for (j = 0; j < w; j++)
scanf("%lld", &a[i][j]);
for (i = 0; i <= h; i++)
for (j = 0; j <= w; j++)
dp[0][i][j] = dp[1][i][j] = 0;
dp[0][0][0] = a[0][0];
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
if (i == h - 1 && j == w - 1)
break;
if (i != 0 || j != 0)
{
if (dp[1][i][j] > a[i][j])
dp[1][i][j] += a[i][j];
else
dp[1][i][j] = 0;
if (dp[0][i][j] > a[i][j])
dp[0][i][j] += a[i][j];
else
{
dp[1][i][j] = max(dp[1][i][j], dp[0][i][j]);
dp[0][i][j] = 0;
}
}
dp[0][i + 1][j] = max(dp[0][i + 1][j], dp[0][i][j]);
dp[0][i][j + 1] = max(dp[0][i][j + 1], dp[0][i][j]);
dp[1][i + 1][j] = max(dp[1][i + 1][j], dp[1][i][j]);
dp[1][i][j + 1] = max(dp[1][i][j + 1], dp[1][i][j]);
}
}
if (max(dp[0][h - 1][w - 1], dp[1][h - 1][w - 1]) > a[h - 1][w - 1])
printf("Yes\n");
else
printf("No\n");
return 0;
}
pengin_2000