結果
問題 |
No.158 奇妙なお使い
|
ユーザー |
![]() |
提出日時 | 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; }