王多鱼获得了一笔的奖金X,要求购买最少的商品把钱花光,即没有零钱剩下,否则奖金会被没收。
一个整数k:商品的种类(每个种类商品个数不限);
第i类商品的价值a[i];
一个整数m:奖金总额;
最少商品数量
输入:
7
1 2 5 10 20 50 100
288
输出:
8
c++代码实现(贪心算法):
/**王多鱼问题*/
#include
using namespace std;
int main()
{
int k,n,m,cnt=0,a[1000];
cout << "商品的种类" << endl;
cin>>k;
cout << "从小到大输入商品的价值" << endl;
for(int i=1;i<=k;i++)
cin>>a[i];
cout << "输入奖金总额" << endl;
cin>>m;
for(int i=k;i>=1;i--){
if(m>=a[i]){
n = m/a[i];
m = m - n*a[i];
cnt +=n;
cout<
王多鱼获得了一笔的奖金X,要求购买最少的商品把钱花光,即没有零钱剩下,否则奖金会被没收。
一个整数k:商品的种类(每个种类商品个数有限);
第i类商品的价值a[i];
第i类商品的数量b[i];
一个整数m:奖金总额;
最少商品数量
输入:
7
1 2 5 10 20 50 100
5 5 5 5 5 5 1
288
输出:
9
c++代码实现(贪心算法):
/**王多鱼问题*/
#include
#include
using namespace std;
int main()
{
int k,n,m,p,cnt=0,a[1000],b[1000];
cout << "商品的种类" << endl;
cin>>k;
cout << "从小到大输入商品的价值" << endl;
for(int i=1;i<=k;i++)
cin>>a[i];
cout << "依次输入每类商品的数量" << endl;
for(int i=1;i<=k;i++)
cin>>b[i];
cout << "输入奖金总额" << endl;
cin>>m;
for(int i=k;i>=1;i--){
if(m>=a[i]){
n = m/a[i];
p = min(n,b[i]);
m = m - p*a[i];
cnt +=p;
cout<
start_time | 8 | 9 | 10 | 12 | 13 |
end_time | 11 | 10 | 15 | 14 | 15 |
一天有n节课,输入起止时间,每节课时间不能冲突,求这一天最多能上多少节课?
课程起止时间(按时间先后顺序输入),以‘q’结束;
最多能上多少节课
输入:
8,11
9,10
10,15
12,14
13,15
q
输出:
2
#include
#include
#include
#include
using namespace std;
typedef struct Suject_time{
int begin_time; //课程开始时间
int end_time; //课程结束时间
}suject_time;
int main()
{
vectorSubject;
string s,p,s1,s2;
int cnt=1;
suject_time tmp;
cout << "输入起止时间,输入'q'字符结束" << endl;
cin >>s;
//p = s.substr(s.find(","));
//s1 = s.substr(s.find_first_not_of(","),s.size()-p.size());
//s2 = s.substr(s.find_first_of(",")+1,p.size()-1);
//cout <>s; //循环输入起止时间
}
for(int i=0;i=Subject[i].end_time){
i =j;
cnt++; //计数
break;
}
else
i++;
}
}
Subject.begin.
cout<<"最大能上课程数:"<
start_time | 13 | 10 | 13 | 15 | 11 |
end_time | 17 | 16 | 15 | 17 | 13 |
一天有n节课,输入起止时间,每节课时间不能冲突,求这一天最多能上多少节课?
课程数量n
每个课程的起止时间(乱序)
最多能上多少节课
输入:
13 17
10 16
13 15
15 17
11 13
输出:
3
#include
#include
#include
有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?
排队人数n,水龙头个数r
每个人的打水时间a[i]
至少花费时间
输入:
5 2
1 2 3 4 6
输出:
22
#include
#include
#include
#include
using namespace std;
/**
class T
{
public:
int x,y,z;
T(int a,int b,int c):x(a),y(b),z(c)
{
}
};*/
class T
{
public:
int x;
T(int a):x(a)
{
}
};
bool operator<(const T&t1,const T&t2)
{
return t1.x>t2.x; //从小到大出队
}
int a[500];
int main(){
int n,r,i,re;
priority_queueq;
cout<<"分别输入排队人数和水龙头数:"<>n>>r){
re=0;
cout<<"输入每个人打水时间:"<>a[i];
}
sort(a,a+n);
for(i=0;i