結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0