1🐋🐋水温调节(黄金;贪心)
时间限制:1秒
占用内存:128M
🐟题目思路
贪心思路:先将两只水龙头的流速开到最大,温度高了,就把热水的流速降低一个单位,温度低了就把冷水的流速降低一个单位,当任意一个水龙头的流速小于0时结束循环。
【码蹄集进阶塔全题解08】算法基础:贪心 MT2080 – MT2092_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double t1,t2,x1,x2,t0;
double y1,y2,t;
double tmax=0x3f3f3f3f,ans1,ans2;
cin>>t1>>t2>>x1>>x2>>t0;
y1=x1;
y2=x2;
while(y1>=0&&y2>=0)
{
t=(t1*y1+t2*y2)/(y1+y2);
if(t>=t0)
{
if(t<tmax)
{
tmax=t;
ans1=y1;
ans2=y2;
}
y2--;
}
else y1--;
}
cout<<ans1<<" "<<ans2;
return 0;
}
2🐋🐋斐波那契数列的组合(黄金;贪心)
时间限制:1秒
占用内存:128M
🐟题目思路
-
贪心思想:要最少数目,那么从大数来取最好。
【码蹄集进阶塔全题解09】算法基础:贪心 MT2093 – MT2105_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int maxm=1e6+50;
int minfbncn(int k)
{
vector<int> f;
f.push_back(1);
f.push_back(1);
while(1)
{
if(f[f.size()-1]+f[f.size()-2]>1e9) break;
f.push_back(f[f.size()-1]+f[f.size()-2]);
}
int cnt=0;
for(int i=f.size()-1;i>=0;i--)
{
if(k>=f[i])
{
cnt+=k/f[i];
k=k-k/f[i]*f[i];
}
if(k==0) break;
}
return cnt;
}
int main( )
{
int n;
cin>>n;
cout<<minfbncn(n)<<endl;
return 0;
}
3🐋🐋数列分段(黄金;贪心)
时间限制:1秒
占用内存:64M
🐟题目思路
贪心思路:每个元素只有两个选择,并到当前段和自成一段。那也就是,每一段都尽可能地接近N即可。
【码蹄集进阶塔全题解09】算法基础:贪心 MT2093 – MT2105_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
int a[200000],n,m,ans;
int main( )
{
cin>>n>>m;
int sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(sum+a[i]<=m) sum+=a[i];
else
{
sum=a[i];
ans++;
}
}
cout<<ans+1;
return 0;
}
4🐋🐋小码哥爱数字(钻石;贪心)
时间限制:1秒
占用内存:128M
🐟题目思路
贪心思路:从左到右遍历这个字符串,只要前面一个数比后面的数要大,那就把前面这个数删掉;如果遍历完了都没有这样的数,就删掉最后一位。
【码蹄集进阶塔全题解09】算法基础:贪心 MT2093 – MT2105_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
string n;
int k,po0;
int main( )
{
cin>>n>>k;
int len=n.length();
while(k--)
{
for(int i=0;i<len;i++)
{
if(n[i]>n[i+1])
{
for(int j=i;j<len;j++) n[j]=n[j+1];
len--;
break;
}
}
}
while(po0<len-1&&n[po0]=='0') po0++;
for(int i=po0;i<len;i++) cout<<n[i];
return 0;
}
5🐋🐋甜品供应(钻石;贪心)
时间限制:1秒
占用内存:128M
🐟题目思路
【码蹄集进阶塔全题解09】算法基础:贪心 MT2093 – MT2105_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct node
{
int l,r;
bool operator<(const node &a) const
{
if(r==a.r) return l<a.l;
return r<a.r;
}
}people[N];
struct sweet
{
int v,num;
//这里要重载>,因为后边用的是小根堆;如果是大根堆,重载<就行;否则编译不通过
bool operator>(const sweet &a) const{return v>a.v;}
};
int C,L,cnt[N],ans;
priority_queue<sweet,vector<sweet>,greater<sweet> > q,tmp;
int main( )
{
cin>>C>>L;
for(int i=1;i<=C;i++) cin>>people[i].l>>people[i].r;
sort(people+1,people+1+C);
for(int i=1;i<=L;i++)
{
sweet t;
cin>>t.v>>t.num;
cnt[t.v]+=t.num;
q.push(t);
}
for(int i=1;i<=C;i++)
{
while((!q.empty())&&q.top().v<people[i].l)
{
tmp.push(q.top());
q.pop();
}
if(!q.empty()&&q.top().v<=people[i].r)
{
ans++;
cnt[q.top().v]--;
if(cnt[q.top().v]==0) q.pop();
}
while(!tmp.empty())
{
q.push(tmp.top());
tmp.pop();
}
}
cout<<ans;
return 0;
}
6🐋🐋活动安排(黄金;贪心)
时间限制:1秒
占用内存:128M
🐟题目思路
【码蹄集进阶塔全题解09】算法基础:贪心 MT2093 – MT2105_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,ans;
struct NODE
{
int l,r;
}node[N];
bool cmp(NODE a,NODE b){return a.r<b.r;}
int main( )
{
cin>>n;
for(int i=1;i<=n;i++) cin>>node[i].l>>node[i].r;
sort(node+1,node+1+n,cmp);
int temp=0;
for(int i=1;i<=n;i++)
{
if(node[i].l>=temp)
{
temp=node[i].r;
ans++;
}
}
cout<<ans;
return 0;
}
有问题我们随时评论区见~
⭐点赞收藏不迷路~