codevs 1052 地鼠遊戲 題解

來源:互聯網
上載者:User

啊~離noip還有1天……我的題還沒刷完呢……我的模板用的還是不熟練……怎麼辦怎麼辦……

先入正題吧……


1052 地鼠遊戲 題目描述 Description

    王鋼是一名學習成績優異的學生,在平時的學習中,他總能利用一切時間認真高效地學習,他不但學習刻苦,而且善於經常總結、完善自己的學習方法,所以他總能在每次考試中得到優異的分數,這一切很大程度上是由於他是一個追求效率的人。

    但王鋼也是一個喜歡玩的人,平時在學校學習他努力剋制自己玩,可在星期天他卻會抽一定的時間讓自己玩一下,他的爸爸媽媽也比較信任他的學習能力和學習習慣,所以在星期天也不會象其他家長一樣對他抓緊,而是允許他在星期天上午可以自由支配時間。

    地鼠遊戲是一項需要反應速度和敏捷判斷力的遊戲。遊戲開始時,會在地板上一下子冒出很多地鼠來,然後等你用榔頭去敲擊這些地鼠,每個地鼠被敲擊後,將會增加相應的遊戲分值。問題是這些地鼠不會傻傻地等你去敲擊,它總會在冒出一會時間後又鑽到地板下面去(而且再也不上來),每個地鼠冒出後停留的時間可能是不同的,而且每個地鼠被敲擊後增加的遊戲分值也可能是不同,為了勝出,遊戲參與者就必鬚根據每個地鼠的特性,有選擇地儘快敲擊一些地鼠,使得總的得分最大。

這個極具挑戰性的遊戲王鋼特別喜歡,最近他經常在星期天上午玩這個遊戲,慢慢地他不但敲擊速度越來越快(敲擊每個地鼠所需要的耗時是1秒),而且他還發現了遊戲的一些特徵,那就是每次遊戲重新開始後,某個地鼠冒出來後停留的時間都是固定的,而且他記錄了每個地鼠被敲擊後將會增加的分值。於是,他在每次遊戲開始後總能有次序地選擇敲擊不同的地鼠,保證每次得到最大的總分值。 輸入描述 Input Description

    輸入包含3行,第一行包含一個整數n(1<=n<=100)表示有n個地鼠從地上冒出來,第二行n個用空格分隔的整數表示每個地鼠冒出後停留的時間,第三行n個用空格分隔的整數表示每個地鼠被敲擊後會增加的分值(<=100)。每行中第i個數都表示第i個地鼠的資訊。 輸出描述 Output Description

    輸出只有一行一個整數,表示王鋼所能獲得的最大遊戲總分值。 範例輸入 Sample Input

5

5  3  6  1  4

7  9  2  1  5 範例輸出 Sample Output

24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

這道題是一道貪心問題……我們可以用堆(優先隊列)來最佳化

貪心策略:當前任務能完成的必然是時間在大於等於目前時間的,然後完成目前時間能完成的較大的任務

簡要做法如下:

首先沒我們先按時間逆序排一遍,然後再逆序枚舉時間;

對於每個時刻,我們把當前時刻所有的價值入到大根堆裡,然後選取堆頂,則是最優的;

由於我們是逆序時間,所以我們放入堆中的所有元素都是目前時間所能完成的。

ps:感謝套神的思路……用c++一寫,我真的醉了……第一次比玨神的短啊。。

++++++++++++++++++++++++++++++代碼如下++++++++++++++++++++++++++++++++++


<span style="font-family:Comic Sans MS;font-size:18px;">#include <iostream>#include <cstdio>#include <algorithm>#include <queue>using namespace std;struct node{int tim,w;bool operator <(node a)const{return tim>a.tim;}}a[130];priority_queue<int>q;int ans,n;int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i].tim);for(int i=1;i<=n;i++)scanf("%d",&a[i].w);sort(a+1,a+n+1);int now=a[1].tim,k=1;while(now){while(a[k].tim==now){q.push(a[k].w);k++;}if(!q.empty()){ans+=q.top();q.pop();}now--;}cout<<ans;return 0;}</span>

還有1天。向上吧。少年。……加油。。。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.