贪心算法—Problem F
2016-03-22 15:53
302 查看
贪心算法—Problem F
题意
给你一个价格,还有面值分别为1,5,10,50,100(单位:毛)纸币的数量,要你用最少数量的纸币和最多数量的凑出这个价格,输出最少和最多的数量。如果凑不出来,输出"-1 -1"。
解题思路
最少的数量要用贪心的思想,优先取面值尽量大的纸币来凑这个价格。找最多的数量的纸币问题可以转化为手里剩余的纸币最少,所以,假设手上总共有money毛,而价格为p毛,我们用手上最少的数量的纸币去凑(money-p)毛,然后再用总数量减去该最少数量即可。
感想
把求最多和最少的纸币数量都转化为一种问题感觉简便很多,用几个循环凑数即可,这样使问题得到简化。
AC代码
#include<iostream>
using namespace std;
int main()
{
int T,i,j;
int p,r,k,money;
int min,max;
int a[]={1,5,10,50,100};
int b[10],c[10],d[10];
cin>>T;
for(i=0;i<T;i++)
{
money=0;
cin>>p;
for(j=0;j<5;j++)
{
cin>>b[j];
money+=a[j]*b[j];
}
r=p;
for(j=4;j>=0;j--)
{
if( (r/a[j]) < b[j] )
{
c[j]=r/a[j];
r-=a[j]*c[j];
}
else
{
c[j]=b[j];
r-=a[j]*c[j];
}
}
if(r!=0)
{
cout<<"-1 -1"<<endl;
}
else
{
k=money-p;
for(j=4;j>=0;j--)
{
if( (k/a[j]) < b[j] )
{
d[j]=k/a[j];
k-=a[j]*d[j];
}
else
{
d[j]=b[j];
k-=d[j]*a[j];
}
}
min=0;
max=0;
if(k==0)
{
for(j=0;j<5;j++)
{
min+=c[j];
}
for(j=0;j<5;j++)
{
max+=(b[j]-d[j]);
}
cout<<min<<""<<max<<endl;
}
}
}
}
题意
给你一个价格,还有面值分别为1,5,10,50,100(单位:毛)纸币的数量,要你用最少数量的纸币和最多数量的凑出这个价格,输出最少和最多的数量。如果凑不出来,输出"-1 -1"。
解题思路
最少的数量要用贪心的思想,优先取面值尽量大的纸币来凑这个价格。找最多的数量的纸币问题可以转化为手里剩余的纸币最少,所以,假设手上总共有money毛,而价格为p毛,我们用手上最少的数量的纸币去凑(money-p)毛,然后再用总数量减去该最少数量即可。
感想
把求最多和最少的纸币数量都转化为一种问题感觉简便很多,用几个循环凑数即可,这样使问题得到简化。
AC代码
#include<iostream>
using namespace std;
int main()
{
int T,i,j;
int p,r,k,money;
int min,max;
int a[]={1,5,10,50,100};
int b[10],c[10],d[10];
cin>>T;
for(i=0;i<T;i++)
{
money=0;
cin>>p;
for(j=0;j<5;j++)
{
cin>>b[j];
money+=a[j]*b[j];
}
r=p;
for(j=4;j>=0;j--)
{
if( (r/a[j]) < b[j] )
{
c[j]=r/a[j];
r-=a[j]*c[j];
}
else
{
c[j]=b[j];
r-=a[j]*c[j];
}
}
if(r!=0)
{
cout<<"-1 -1"<<endl;
}
else
{
k=money-p;
for(j=4;j>=0;j--)
{
if( (k/a[j]) < b[j] )
{
d[j]=k/a[j];
k-=a[j]*d[j];
}
else
{
d[j]=b[j];
k-=d[j]*a[j];
}
}
min=0;
max=0;
if(k==0)
{
for(j=0;j<5;j++)
{
min+=c[j];
}
for(j=0;j<5;j++)
{
max+=(b[j]-d[j]);
}
cout<<min<<""<<max<<endl;
}
}
}
}
相关文章推荐
- .NET并行编程 - 并行方式
- [LeetCode]-DataBase-Consecutive Numbers
- word2007基础研究(一)-调节段落的行距与间距
- python中文乱码
- 【Matlab开发】MATLAB编译C/C++代码
- Zend加密服务器配置以及加密工具的使用
- RecyclerView的简单用法
- kali中wireshark打开后错误
- NET牛人应该知道些什么?(瞬间觉得自己弱爆了)
- 在 Android 上使用 RxNetty
- 数据存储——SQLite
- Educational Codeforces Round 5 D. Longest k-Good Segment
- linux命令:find 命令概览
- A框架第一步,传递不同参数.主程序执行对应方法
- HTML—CSS样式表
- PHP快速排序
- PHP二分查找
- 用模板实现 seqlist
- JS中多种方式创建对象详解
- caffe调试 ubuntu1404+eclipse