1.硬币问题
有1元,5元,10元,50元,100元,500元的硬币,各C1,C5,C10,C50,C100,C500C1,C5,C10,C50,C100,C500枚。现在要用来支付A元,最少需要各种硬币多少。假定本题至少存在一种支付方案。
样例输入
C1=3,
C5=2,
C10=1,
C50=3,
C100=0,
C500=2
A = 620
样例输出
6(500的1个,50的2个,10的1个,5元的2个,合计6个)
贪心算法:优先使用大面值
# include <cstdio>
# include <algorithm>
using namespace std;
const int V[6] = { 1,5,10,50,100,500 };
int C[6];//C[0]=c1, C[1]=c5,.....
int A;
void solve()
{
int ans = 0;
for (int i = 5; i >= 0; i--)//核心:从面值最大的开始取
{
int t = min(A / V[i], C[i]);//谁小取谁(不能取超过拥有张数的钱)
A -= t * V[i];
ans += t;
}
printf("%d\n", ans);
}
int main()
{
for(;;)
{
for(int i = 0; i < 6; i++)
{
if(scanf("%d", &C[i])==EOF)
goto aa;
}scanf("%d", &A);
solve();
}
aa:
{
}
}
2.区间调度问题
有n项工作,每项工作分别在时间开始,在