結果
| 問題 |
No.496 ワープクリスタル (給料日前編)
|
| コンテスト | |
| ユーザー |
ikd
|
| 提出日時 | 2017-03-24 23:40:39 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 1,072 bytes |
| コンパイル時間 | 470 ms |
| コンパイル使用メモリ | 56,904 KB |
| 実行使用メモリ | 5,504 KB |
| 最終ジャッジ日時 | 2024-07-06 01:33:11 |
| 合計ジャッジ時間 | 1,312 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 23 |
ソースコード
#include<iostream>
using namespace std;
#define repeat(i, n) for(int i=0; i<(n); i++)
int memo[51][101][101];
const int inf=1e8;
int main(){
int gx, gy, N, F;
cin>> gx>> gy>> N>> F;
int dx[N], dy[N], c[N];
repeat(i, N) cin>> dx[i]>> dy[i]>> c[i];
repeat(i, 51){
repeat(x, 101){
repeat(y, 101){
if(x==0&&y==0) memo[i][x][y]=0;
else memo[i][x][y]=inf;
}
}
}
repeat(i, N){
repeat(x, gx+1){
repeat(y, gy+1){
memo[i+1][x][y]=min(memo[i+1][x][y], memo[i][x][y]);
if(memo[i][x][y]==inf) continue;
if(x+dx[i]>gx||y+dy[i]>gy) continue;
if(c[i]>(dx[i]+dy[i])*F) continue;
memo[i+1][x+dx[i]][y+dy[i]]
=min(memo[i+1][x+dx[i]][y+dy[i]], memo[i][x][y]+c[i]);
}
}
}
int C=inf;
repeat(x, gx+1){
repeat(y, gy+1){
if(memo[N][x][y]==inf) continue;
int _c=F*((gx-x)+(gy-y));
_c+=memo[N][x][y];
C=min(C, _c);
}
}
cout<< C<< endl;
return 0;
}
ikd