不要等待完美时刻再做决定,立刻行动,因为“完美”永远不会到来|

S__X

园龄:2年3个月粉丝:0关注:0

2023-08-27 22:26阅读: 97评论: 0推荐: 0

P9585 酒店题解

分析:

贪心算法。

n 个客人。对于每一位客人,我们都要遍历一遍所有房间,找出最优入住房间编号。

设当前遍历的房间编号为 j

分三种情况:

  1. 左右两边的房间皆空,则为最优房间。
  2. 左右两边只有一个房间有客人,则愤怒值加 2(因为有两个客人所以加 2)。
  3. 左右两边都有人住,则为最坏情况,愤怒值加 4 (中间的客人愤怒值加 2,左右两边客人愤怒值加 1)。

n 个客人,所以要进行 n 次循环。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m,sum,f[105];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) {
int k=0x3f,I=0;//k为愤怒值,初始化,I为客人入住的房间编号
for(int j=1;j<=m;j++) {
int fr=j-1,en=j+1;
if(j==1) fr=m;//因为是环形,所以要特别处理一下
if(j==m) en=1;
if(f[j]==0) {//如果当前房间没有人入住
int K=0;
if(f[fr]==1) K+=2;//相邻的房间只有一个人入住
if(f[en]==1) K+=2;//相邻的房间有两个人入住
if(K<k) {
k=K;
I=j;
}
}
}
sum+=k;
f[I]=1;//标记
}
cout<<sum<<endl;
return 0;
}

本文作者:S__X

本文链接:https://www.cnblogs.com/splay/p/17661008.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   S__X  阅读(97)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起