結果
| 問題 |
No.158 奇妙なお使い
|
| コンテスト | |
| ユーザー |
fiord
|
| 提出日時 | 2015-08-24 00:06:04 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,196 bytes |
| コンパイル時間 | 1,366 ms |
| コンパイル使用メモリ | 166,744 KB |
| 実行使用メモリ | 818,088 KB |
| 最終ジャッジ日時 | 2024-07-18 13:06:04 |
| 合計ジャッジ時間 | 4,963 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 4 |
| other | AC * 4 MLE * 1 -- * 22 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int dp[10][100][10000];
tuple<int,int,int> ok(int a,int th,int hu,int on){
int dig=min(th,a/1000);
th-=dig; a-=dig*1000;
dig=min(hu,a/100);
hu-=dig; a-=dig*100;
dig=min(on,a);
on-=dig; a-=dig;
if(a>0) return make_tuple(-1,-1,-1);
return make_tuple(th,hu,on);
}
int main(){
int a[3]; cin>>a[0]>>a[1]>>a[2];
int db; cin>>db;
int b[3]; cin>>b[0]>>b[1]>>b[2];
int dc; cin>>dc;
int c[3]; cin>>c[0]>>c[1]>>c[2];
int ans=0;
queue<tuple<int,int,int> > q;
q.push(make_tuple(a[0],a[1],a[2]));
tuple<int,int,int> n;
while(!q.empty()){
n=q.front(); q.pop();
int th=get<0>(n);
int hu=get<1>(n);
int on=get<2>(n);
n=ok(db,th,hu,on);
if(get<0>(n)!=-1){
int nt=get<0>(n)+b[0];
int nh=get<1>(n)+b[1];
int no=get<2>(n)+b[2];
dp[nt][nh][no]=max(dp[nt][nh][no],dp[th][hu][on]+1);
q.push(make_tuple(nt,nh,no));
ans=max(ans,dp[nt][nh][no]);
}
n=ok(dc,th,hu,on);
if(get<0>(n)!=-1){
int nt=get<0>(n)+c[0];
int nh=get<1>(n)+c[1];
int no=get<2>(n)+c[2];
dp[nt][nh][no]=max(dp[nt][nh][no],dp[th][hu][on]+1);
q.push(make_tuple(nt,nh,no));
ans=max(ans,dp[nt][nh][no]);
}
}
cout<<ans<<endl;
return 0;
}
fiord