日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod 1475:建设国家 优先队列的好题

發布時間:2024/10/8 编程问答 38 如意码农
生活随笔 收集整理的這篇文章主要介紹了 51nod 1475:建设国家 优先队列的好题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1475 建設國家
基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級算法題
 收藏
 關注

小C現在想建設一個國家。這個國家中有一個首都,然后有若干個中間站,還有若干個城市。

現在小C想把國家建造成這樣的形狀:選若干(可以是0個)的中間站把他們連成一條直線,然后把首都連在這一條直線的左端。然后每個點可以連一個城市,特別的是最右端的點可以連接兩個城市。

現在有n個城市的規劃供小C選擇。但是,他們那兒的交通條件比較差,他們那兒一天是2*H個小時,每個城市里面的人每天都會去首都拿一樣東西,從他們所在的城市出發,到了首都之后拿了東西就走(拿東西的時間可以忽略不計),他們要在2*H個小時之內返回他們自己的家中(從家中出發到返回家中不超過2*H小時)。

每個城市有兩個屬性,一個是城市的直徑,另外一個是能居住的人口數目。對于第i個城市而言,這兩個屬性分別是hi,pi。

城市的直徑的意思是離這個城市出口最遠的人想要出城先要在城里行走的最少的時間。

在首都,中間站,城市之間行走要花費1小時的時間。

小C想選擇一些城市然后通過若干的中間站和首都連接起來,在每個人能在2*H小時返回的條件下所有城市居住的總人口數目要最多。

樣例解釋:最上面的藍點表示首都,其它的藍點表示中間站,剩下的紅圈表示選擇的城市。


Input
單組測試數據。
第一行包含兩個整數n 和H (1 ≤ n ≤ 1000,1 ≤ H ≤ 1000000000),表示可供選擇的城市數目和時間限制。
接下來n行,每行有兩個整數hi, pi (1 ≤ hi ≤ H, 1 ≤ pi ≤ 1000),第i個城市的兩個屬性,即直徑和能容納人口數。
Output
輸出最多能居住的人口數目。
Input示例
5 10
1 1
1 1
2 2
3 3
4 4
Output示例
11

我到現在還在想為什么這道題僅僅是20分的一道題,一開始做的時候題意都沒能完全理解。。。理解了之后發現情況怎么這么多,要考慮的因素怎么這么多,用優先隊列是肯定的,怎么用都是個問題。。。最后是一位大神把代碼發過來,跑了幾次之后,才理解。但現在,對這道題真的是快要膜拜了,無論是出題人還是寫出這種做法的人,可能是我水平現在太弱了,這個代碼仔細想了想,寫得是真的6。膜拜~

將距離按照降序排列,然后在只有滿足當前數量<i的時候往里面添加元素,彈出來的是當前隊列中的人口最少的城市,隊列中的是被選中的滿足接下來長度要求的城市,然后在這一輪中添加這個距離的所有城市,之后如果城市數量超出,再將人口最少的城市排除。也就是說,隊列里面是符合長度要求的人口最多且在當前狀況下數量最多的城市。

膜拜大神~

代碼:

#include <iostream>
#include <vector>
#include <queue>
#pragma warning(disable:4996)
using namespace std; const int N = 1005;
int n,H;
vector <int> v[N]; int main()
{
scanf("%d%d",&n,&H);
for(int h,p,i=0;i<n;i++)
{
scanf("%d%d",&h,&p);
int x = min(n,H-h);
v[x].push_back(p);
}
priority_queue<int>q;
int ans = 0;
for(int i=1,s=0;i<=n;i++)
{
for(;q.size()>=i;q.pop())
s+=q.top();
for(auto &p:v[i])
{
q.push(-p);
s += p;
}
for(;q.size()>i+1;q.pop())
{
s += q.top();
}
ans = max(ans,s);
}
printf("%d\n",ans);
}

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

總結

以上是生活随笔為你收集整理的51nod 1475:建设国家 优先队列的好题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。