The 2010 FIFA World Cup toke place between 11 June and 11 July 2010 in South Africa. Being a non-fans, asmn likes football gambling more than the football match itself. Of course, he won't use real money, he just gamble on the renren.com for fun using the virtual gold coin.
The rule of football gambling is simple. The bookmaker display three decimal numbers a, b, c before the match between team X and team Y. Number a is the odds for team X will win the game. Number b is the odds for they will get a draw. Number c is the odds for team X will lose the game.
Odds means that if you bet x gold coins, you will get floor(odds * x) gold coins in total if you guess the right result, or you will get nothing.
The Odds of the online gambling is higher than that in the real gambling because the gold coins are virtual. After several gambling, asmn found that, sometimes the odds are too high that it is possible to find a way to bet on three result at the same time, so that he can win money whatever the result is.
After several gambling, asmn lose a lot of money. So he decide not to take any risk in the following gambling. Now, given that asmn has s gold coins before each match and the odds for this math, you should caluate the maximum number of coins asmn will have after the gambling in the worst situation.
Input
The input consists of N cases. The first line of the input contains a positive integer N(N <= 100). Each case contains an integer and three decimal numbers s, a, b and c (0 <coins < 1000000, 1 < a, b,c < 100), the meaning of which is described above. Each decimal number will have exactly two digits after the decimal point.
Output
For each case, output the maximum number of coins that asmn will have after the match in the worst situation.
Sample Input
Sample Output
333
1
43
Hint
In the third case, the odds are very high, but asmn has only one coin. If he join the gambling, he may lost his last coin.
Author: WANG, Yelei
Source: ZOJ Monthly, July 2010
来自:
ゆっくりでいいさ
このblogはwatashiの平凡な日常を淡々と描く物です。過度な期待はしないでください。
从0到s枚举并模拟下注总金额,每一次都应该把这一元钱押到当前三种情况中收益最小的一个。一个优化就是先把大部分的钱都按b*c, c*a, a*b的比率下注,然后one by one的枚举。集训的时候我暴力枚举TLE了,而
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int re; long long int a,b,s,c[3],d[3],e[3],ans; scanf("%d",&re); while(re--) { scanf("%lld",&s); for(int i=0;i<3;i++) { scanf("%lld.%lld",&a,&b); c } ans=0; d[0]=d[1]=d[2]=0; e[0]=e[1]=e[2]=0; for(int i=1;i<=s;i++) { int k=min_element(e,e+3)-e; d[k]++; e[k]=d[k]*c[k]/100; ans=max(ans,*min_element(e,e+3)-i); } printf("%lld ",ans+s); } return 0; } |