結果
| 問題 | No.2095 High Rise |
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2022-10-07 21:49:08 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 503 ms / 2,000 ms |
| コード長 | 1,737 bytes |
| 記録 | |
| コンパイル時間 | 4,512 ms |
| コンパイル使用メモリ | 268,516 KB |
| 実行使用メモリ | 27,776 KB |
| 最終ジャッジ日時 | 2026-06-27 22:50:03 |
| 合計ジャッジ時間 | 8,069 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
#include <stdio.h>
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 4000000000000000001
long long d[1005][1005][2];
int main(){
int N,M;
cin>>N>>M;
vector a(N,vector<long long>(M));
rep(i,N){
rep(j,M){
cin>>a[i][j];
}
}
if(N==1){
cout<<0<<endl;
return 0;
}
rep(i,N){
rep(j,M){
rep(k,2){
d[i][j][k] = Inf64;
}
}
}
using P = pair<long long,pair<pair<int,int>,int>>;////pair<long long ,pair<pair<int,int>,int>>>;
priority_queue<P,vector<P>,greater<P>> Q;
Q.emplace(0,make_pair(make_pair(0,0),0));
d[0][0][0] = 0;
while(Q.size()>0){
long long D = Q.top().first;
int x = Q.top().second.first.first;
int y = Q.top().second.first.second;
int z = Q.top().second.second;
Q.pop();
if(d[x][y][z]!=D)continue;
{
int xx = x,yy = y,zz = z^1;
long long DD = D + a[x][y] * zz;
if(d[xx][yy][zz]>DD){
d[xx][yy][zz] = DD;
Q.emplace(DD,make_pair(make_pair(xx,yy),zz));
}
}
if(z==0){
if(y!=0){
int xx = x,yy = y-1,zz = z;
long long DD = D;
if(d[xx][yy][zz]>DD){
d[xx][yy][zz] = DD;
Q.emplace(DD,make_pair(make_pair(xx,yy),zz));
}
}
if(y!=M-1){
int xx = x,yy = y+1,zz = z;
long long DD = D;
if(d[xx][yy][zz]>DD){
d[xx][yy][zz] = DD;
Q.emplace(DD,make_pair(make_pair(xx,yy),zz));
}
}
}
else{
if(x!=N-1){
int xx = x+1,yy = y,zz = z;
long long DD = D + a[xx][yy];
if(d[xx][yy][zz]>DD){
d[xx][yy][zz] = DD;
Q.emplace(DD,make_pair(make_pair(xx,yy),zz));
}
}
}
}
cout<<d[N-1][M-1][0]<<endl;
return 0;
}
沙耶花