【巧妙的貪心條件】HDU 3177—— Crixalis’s Equipment

來源:互聯網
上載者:User

題目:點擊開啟題目連結

巧妙的貪心。這個問題講了一個沙王(就是DOTA裡面的那貨)要搬家,他有一個V大小的洞,M件裝備,每件裝備有兩個屬性,Ai是永久佔用的空間,搬過來就佔了,Bi是臨時佔用空間,除了滿足洞>=Ai外,還要滿足搬這件裝備時,洞裡的大小大於等於Bi。問能否搬完。

貪心的形式已經很熟了,但這個題的貪心排序開始排序的時候,是按Ai>Bi來排序的,結果WA。

想了想,Bi事實上是在搬完後就移除的,於是按Ai+Bi>A2i+B2i排,依然錯誤。

後來再仔細一想,應該是讓A的永久空間盡量大(因為大東西要先搬,否則小東西多了就沒有空放進去了),但Bi的臨時空間要盡量小,即AI和BI的差要盡量的大,如果差一樣的話應該保證BI盡量的小,因為臨時空間只是門檻,實際是用不到的,所以一定要先過門檻。

#include <iostream>#include <cstring>#include <string>#include <algorithm>using namespace std;class equip{    public:    int ai;    int bi;};bool cmp(equip a,equip b){if((a.ai+b.bi)!=(b.ai+a.bi))return (a.ai+b.bi)<(a.bi+b.ai);elsereturn a.bi<b.bi;}equip equipment[1005];int main(){int testcase;cin>>testcase;while(testcase--){int holev,eqnum;int pos=1;cin>>holev>>eqnum;for(int i=0;i<eqnum;i++){cin>>equipment[i].ai>>equipment[i].bi;}sort(equipment,equipment+eqnum,cmp);for(int i=0;i<eqnum;i++){if(holev>=equipment[i].ai && holev>=equipment[i].bi){holev-=equipment[i].ai;}else{pos=0;break;}}if(pos==1)cout<<"Yes"<<endl;else if(pos==0)cout<<"No"<<endl;}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.