第一行一个数字n,表示排队的人的数量.i
第二行n个数字,第i个数字为a
,表示队伍中第i个人所持有的钞票的面值.
如果售票员能完成找零,输出"YES"(不含引号).
反之输出"NO".
1≤n≤105
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 int n, x, ans = 0; 6 cin >> n; 7 for(int i = 0; i < n; i ++) { 8 cin >> x; 9 if(x == 25) ans += x; 10 if(x == 50) { 11 if(ans < 25) return 0*printf("NO\n"); 12 ans -= 25; 13 } else if(x == 100) { 14 if(ans < 75) return 0*printf("NO\n"); 15 ans -= 75; 16 } 17 } 18 printf("YES\n"); 19 return 0; 20 }
第一行一个数字n,表示金币总数.
第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.
输出满足条件的最大数字.
0≤ n≤ 106
1≤ ai≤ 105
先全部选最小花费的,这样可以使的长度最长,然后看剩下的金币能不能用更大的数补充。
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[10], n; 4 int main() { 5 int MIN = 1e6, cnt; 6 cin >> n; 7 for(int i = 1; i < 10; i ++) { 8 cin >> a[i]; 9 if(a[i] <= MIN) { 10 MIN = a[i]; 11 cnt = i; 12 } 13 } 14 int ans = n / MIN; 15 if(ans == 0) return 0*printf("-1\n"); 16 n %= MIN; 17 for(int i = 9; i >= 1; i --) { 18 if(i <= cnt) break; 19 int num = n / (a[i]-MIN); 20 n -= num*(a[i]-MIN); 21 while(num) { 22 printf("%d",i); 23 ans--;num--; 24 } 25 } 26 for(int i = 1; i <= ans; i ++) printf("%d",cnt); 27 printf("\n"); 28 return 0; 29 }
原文:https://www.cnblogs.com/xingkongyihao/p/9189204.html