結果

問題 No.1 道のショートカット
ユーザー itezpace
提出日時 2016-09-03 12:02:43
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
WA  
実行時間 -
コード長 1,226 bytes
コンパイル時間 1,929 ms
コンパイル使用メモリ 64,604 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-08 04:33:09
合計ジャッジ時間 2,055 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 17 WA * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main(){
  int n,c,v;
  cin>>n;
  cin>>c;
  cin>>v;
  vector<vector<int>> vv;
  int n2=0;
  for(int i=0; i<4; ++i){
    vector<int> v1;
    for(int j=0; j<v; ++j){
      int a;
      cin>>a;
      v1.push_back(a);
      if(i==0){
        if(n2<a) n2=a;
      }
    }
    vv.push_back(v1);
  }
  int dp[c+1][n];
  for(int i=0; i<c+1; ++i){
    for(int j=0; j<n; ++j){
      if(j==0) dp[i][j]=0;
      else dp[i][j]=SHRT_MAX;
    }
  }
  for(int i=1; i<=n2; ++i){
    for(int j=0; j<v; ++j){
      int d=vv[0][j]; //1st
      if(i==d){
        for(int k=0; k<c+1; ++k){
          int e=dp[k][d-1]; //cost before
          int e2=e+vv[2][j]; //cost after
          if(e2<=c){
            int f=dp[e][d-1]; //time before
            int g=f+vv[3][j]; //time after
            int h=vv[1][j]; //2nd
            for(int l=d-1; l<h; ++l){
              int o=dp[e2][l];
              if(o>g){
                dp[e2][l]=g;
              }
            } //l
          }
        } //k
      }
    } //j
  } //l
  int z=SHRT_MAX;
  for(int i=0; i<c+1; ++i){
    int x=dp[i][n-1];
    if(z>x) z=x;
  }
  if(z==SHRT_MAX) z=-1;
  cout<<z<<endl;
  return 0;
}
0