高精度,贪心 - FZU 2281 (BigInteger)
2017-08-22 11:40
295 查看
题意
买卖GTX1920,已知未来一段时间每块GTX1920的价格,问买卖后最大的收益每次买入都尽可能多买,每次卖都全卖
在每个局部价格山谷都买入,然后在接下来的第一个局部价格山顶卖出
最后的资金会很大,超过long long的范围,但是中间结果不能取模,不然无法计算出下次购买GTX1920的数量,所以使用BigInteger来计算
BigInteger用法总结
使用前要import java.math.BigInteger;
不能直接给BigInteger赋值,使用
BigInteger mod=BigInteger.valueOf(1000000007);
运算规则:(a和b都必须为BigInteger类型)
加(a+b):
a.add(b);
减(a-b):
a.subtract(b);
乘(a*b):
a.multiply(b);
除(a/b):
a.divide(b);
取模(a%b):
a.mod(b);
比较:
a.compareTo(b)//a<b,-1 a==b,0 a>b,1
import java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int T; int n,m; int[] c = new int[2005]; T=cin.nextInt(); BigInteger ans,mod=BigInteger.valueOf(1000000007); for(int xx=1;xx<=T;++xx){ n=cin.nextInt(); m=cin.nextInt(); ans=BigInteger.valueOf(m); for(int j=0;j<n;++j) { c[j]=cin.nextInt(); } int i,j,k; for(i=0;i<n;) { j=i; while(j<n-1&&c[j+1]<=c[j])++j; if(j==n-1)break; k=j; while(k<n-1&&c[k+1]>c[k])++k; BigInteger res=ans.mod(BigInteger.valueOf(c[j])); BigInteger buy=ans.divide(BigInteger.valueOf(c[j])); buy=buy.multiply(BigInteger.valueOf(c[k])); ans=res.add(buy); i=k+1; } System.out.println("Case #"+xx+": "+ans.mod(mod)); } } }
相关文章推荐
- Sicily 1020 Big Integer(高精度运算)
- A * B Problem (Big integer version) 【高精度】
- 高精度模板BigInteger
- java中进行高精度、大数运算总结BigInteger BigDecimal
- Find the maximum 欧拉函数 高精度 BigInteger TWT Tokyo Olympic 2COMBO-1
- [中等] 比较完整的BigInteger高精度整数类(C++实现)
- A + B Problem (Big integer version) 【高精度】
- Java 大数高精度函数(BigInteger)
- 高精度运算类(BigInteger,BigDecimal)
- BigInteger大整数类高精度
- 【JavaSE】Java高精度计算类:BigInteger和BigDecimal
- BigInteger之高精度乘法
- BigInteger与BigDecimal高精度计算
- fzu 2281 Trades [第八届福建省大学生程序设计竞赛 Problem J Trades] [贪心]
- JAVA高精度加法数组和Biginteger实现
- BigInteger之高精度加法
- A * B Problem (Big integer version) 【高精度】
- Java的两个高精度计算的类:BigInteger,BigDecimal
- BigInteger实际用法
- java.math.BigInteger_100的阶乘的实现