Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
JAVA做的 一直WA 测试了好多数据都没找到原因 哪位大神能帮我找出来 谢~import java.util.Scanner; public class Main { private Scanner sc; private int n; private Money[] money;//一行输入存到一个money对象中 private int lengthOfArray; private int amountOfMoney;//每周给的最少的钱数额 private int maxNumberOfWeeks;//最多付的周数 public Main() { sc = new Scanner(System.in); maxNumberOfWeeks = 0; } public void input() { n = sc.nextInt(); amountOfMoney = sc.nextInt(); money = new Money[n]; int denomination = 0;//面值 int numberOfCoinsOfTheDenomination = 0;//相应面值数目 int i = 0; for (int group = 0; group <= n - 1; group ++) { denomination = sc.nextInt(); numberOfCoinsOfTheDenomination = sc.nextInt(); if (denomination >= amountOfMoney) maxNumberOfWeeks += numberOfCoinsOfTheDenomination; else { money[i] = new Money(); money[i].denomination = denomination; money[i].numberOfCoinsOfTheDenomination = numberOfCoinsOfTheDenomination; i++; } } lengthOfArray = i; } public void calculateTheMaxWeeks() { quickSort(money, 0, lengthOfArray - 1); boolean tooMuch = false; while(true) { int max = 0; for (int i = lengthOfArray - 1; i >= 0; i --) { while (max < amountOfMoney && money[i].numberOfCoinsOfTheDenomination > 0 ) { max += money[i].denomination; money[i].numberOfCoinsOfTheDenomination --; if (max >= amountOfMoney) {tooMuch = true;} } if (tooMuch) { max -= money[i].denomination; money[i].numberOfCoinsOfTheDenomination ++; tooMuch = false; } } boolean canPayHim = false; for (int i = 0; i <= lengthOfArray - 1; i ++) { if(money[i].numberOfCoinsOfTheDenomination > 0 && (max + money[i].denomination) >= amountOfMoney) { money[i].numberOfCoinsOfTheDenomination --; maxNumberOfWeeks ++; canPayHim = true; break; } } if (!canPayHim) {return ;} } } private void quickSort(Money []money, int low, int high) { if (low < high) { int mid = quickPass(money, low, high); quickSort(money, low, mid - 1); quickSort(money, mid + 1, high); } } private int quickPass(Money []money, int low, int high) { Money theMidValue = money[low]; while (low < high) { while (low < high && money[high].denomination >= theMidValue.denomination ) high --; if (low < high) { money[low] = money[high]; low ++; } while (low < high && money[low].denomination >= theMidValue.denomination ) low ++; if (low < high) { money[high] = money[low]; high --; } } int mid = low; //or mid = high; money[mid] = theMidValue; return mid; } public static void main(String []args) { Main solution = new Main(); solution.input(); solution.calculateTheMaxWeeks(); System.out.print(solution.maxNumberOfWeeks); } public class Money { public int denomination; public int numberOfCoinsOfTheDenomination; public Money() {} } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator