結果
| 問題 |
No.158 奇妙なお使い
|
| コンテスト | |
| ユーザー |
wing3196
|
| 提出日時 | 2015-02-27 17:29:19 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,243 bytes |
| コンパイル時間 | 793 ms |
| コンパイル使用メモリ | 78,736 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-23 22:40:35 |
| 合計ジャッジ時間 | 2,131 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 14 WA * 10 RE * 3 |
ソースコード
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<string>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstring>
using namespace std;
struct Data{
int a,b,c,cnt;
Data(){
a=b=c=-1; cnt=0;
}
Data(int _a,int _b,int _c,int _cnt){
a=_a; b=_b; c=_c; cnt=_cnt;
}
Data(Data x,Data y,int d){
while(x.a>0 && d>=1000){
d -= 1000;
x.a--;
}
while(x.b>0 && d>=100){
d -= 100;
x.b--;
}
while(x.c>0 && d>0){
d--;
x.c--;
}
if(d!=0){
a=b=c=-1;
}
else{
a = x.a+y.a; b = x.b+y.b; c = x.c+y.c;
cnt = x.cnt+1;
}
}
bool operator<(const Data &x)const{
if(a!=x.a) return a<x.a;
if(b!=x.b) return b<x.b;
return c<x.c;
}
void input(){
cin>>a>>b>>c;
}
int get_sum(){
return a*1000+b*100+c;
}
};
Data dp[10000];
int main(){
Data A,B,C;
int Db,Dc;
A.input();
cin>>Db;
B.input();
cin>>Dc;
C.input();
dp[A.get_sum()] = A;
int ans = 0;
for(int i=A.get_sum();i>=0;i--){
if(dp[i].a==-1) continue;
ans = max(ans,dp[i].cnt);
dp[i-Db+B.get_sum()] = max(dp[i-Db+B.get_sum()],Data(dp[i],B,Db));
dp[i-Dc+C.get_sum()] = max(dp[i-Dc+C.get_sum()],Data(dp[i],C,Dc));
}
printf("%d\n",ans);
return 0;
}
wing3196