找零钱
问题描述
有n个人正在饭堂排队买海北鸡饭。每份海北鸡饭要25元。奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25、50、100元),而且饭堂阿姨一开始没有任何零钱。请问饭堂阿姨能否给所有人找零(假设饭堂阿姨足够聪明)
输入格式
第一行一个整数n,表示排队的人数。
接下来n个整数a[1],a[2],...,a[n]。a[i]表示第i位学生手里钞票的价值(i越小,在队伍里越靠前)
输出格式
输出YES或者NO
样例输入
4
25 25 50 50
样例输出
YES
样例输入
2
25 100
样例输出
NO
样例输入
4
25 25 50 100
样例输出
YES
数据规模和约定
n不超过1000000
贪心算法常以当前情况做最优选择,而不考虑各种可能的情况没所以贪心算法不需要回溯。
import java.util.Scanner;
public class 贪心¥找零钱 {
private static int[] a;
private static int n;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n = sc.nextInt();
a = new int[1000000];
long c25=0;
long c50=0;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
}
int flag=1;//阿姨是否可以给所用有成功找钱
for(int i=0;i<n;i++){
if(a[i]==25)
c25+=1;
else if(a[i]==50){
c25-=1;
c50+=1;
}else if(a[i]==100){
if(c50>0){
c50-=1;
c25-=1;
}else{
c25-=3;
}
}
if(c25<0){
System.out.println("NO");
break;
}
}
if(c25>=0)
System.out.println("YES");
}
}
5830

被折叠的 条评论
为什么被折叠?



