結果
| 問題 |
No.34 砂漠の行商人
|
| コンテスト | |
| ユーザー |
momoyuu
|
| 提出日時 | 2024-07-28 01:31:32 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,175 ms / 5,000 ms |
| コード長 | 1,414 bytes |
| コンパイル時間 | 1,542 ms |
| コンパイル使用メモリ | 109,544 KB |
| 実行使用メモリ | 397,524 KB |
| 最終ジャッジ日時 | 2024-07-28 01:31:41 |
| 合計ジャッジ時間 | 7,894 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
#include<cstdint>
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n,v;
cin>>n>>v;
vector<vector<vector<__int16_t>>> dp(n,vector<vector<__int16_t>>(n,vector<__int16_t>(v+1,n+n)));
int si,sj,gi,gj;
cin>>si>>sj>>gi>>gj;
si--;sj--;gi--;gj--;
swap(si,sj);
swap(gi,gj);
dp[si][sj][v] = 0;
vector<pair<pair<int,int>,int>> que;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
vector<vector<int>> a(n,vector<int>(n));
for(int i = 0;i<n;i++) for(int j = 0;j<n;j++) cin>>a[i][j];
que.push_back(make_pair(make_pair(si,sj),v));
for(int i = 0;i<que.size();i++){
auto now = que[i];
int ni = que[i].first.first;
int nj = que[i].first.second;
if(ni==gi&&gj==nj){
cout<<dp[ni][nj][que[i].second]<<endl;
return 0;
}
int kk = que[i].second;
for(int k = 0;k<4;k++){
int nni = ni + dx[k];
int nnj = nj + dy[k];
if(nni<0||nnj<0||nni>=n||nnj>=n) continue;
int nxt = kk - a[nni][nnj];
if(nxt<=0) continue;
if(dp[nni][nnj][nxt]<=dp[ni][nj][kk]+1) continue;
dp[nni][nnj][nxt] = dp[ni][nj][kk] + 1;
que.push_back({{nni,nnj},nxt});
}
}
cout<<-1<<endl;
}
momoyuu