| ||||||||||
| 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