51nod1475 貪心 列舉

2022-02-19 21:51:50 字數 852 閱讀 5569

題意:中文題誒~

思路:看懂題意後,首先想到的是貪心:

按照人數非遞增排序,對於當前城市盡量將其排在離首都遠的地方,這樣得到的人數顯然是最大的;

對於最右邊可以放兩個城市,我一開始是將其餘城市都安排好,再從剩下的城市中選擇乙個人數盡量多的。然而wa了;

舉乙個反例:

5 54 1

3 22 3

1 41 4

按照這個思路得到的答案是13,但顯然正確答案是14;

顯然右邊多出的乙個城市不能最後再選,因為本來多出的那個城市可能會在前面貪心時就被選走了;

解決的方法很簡單,既然放後面不行,那先確定多出的那個城市就好了,所以可以先列舉多出那個城市,再按照前面的思路貪心剩下的城市就好了。。。

**:

1 #include 2 #include 3 #include 4 #include 

5using

namespace

std;67

const

int maxn=1e5+10

;8 mapvis;

9struct

nodegg[maxn];

1213

bool

cmp(node a, node b)

1617

int main(void

)23 sort(gg, gg+n, cmp);

24for(int j=0; j)

34if(x>0)39

}40 num=max(num, ans);41}

42 cout << num <

43return0;

44 }

view code

51Nod 1475 建設國家 貪心 列舉

題目 小c現在想建設乙個國家。這個國家中有乙個首都,然後有若干個中間站,還有若干個城市。現在小c想把國家建造成這樣的形狀 選若干 可以是0個 的中間站把他們連成一條直線,然後把首都 首都也是乙個中間站 連在這一條直線的左端。然後每個點可以連乙個城市,特別的是最右端的點可以連線兩個城市。現在有n個城市...

51nod 1475 建設國家 優先佇列

小c現在想建設乙個國家。這個國家中有乙個首都,然後有若干個中間站,還有若干個城市。現在小c想把國家建造成這樣的形狀 選若干 可以是0個 的中間站把他們連成一條直線,然後把首都 首都也是乙個中間站 連在這一條直線的左端。然後每個點可以連乙個城市,特別的是最右端的點可以連線兩個城市。現在有n個城市的規劃...

51nod1625 列舉 貪心

題意 中文題誒 思路 列舉 貪心 一開始寫的行和列同時列舉,寫的時候就擔心可能行和列會相互影響,提交結果證明我的擔心是對的 注意到1 n 10,1 m 200,n很小,那麼所有行的狀態不超過1024種,所以可以列舉所有行的狀態,對於每一種行的狀態下再對列貪心。枚舉行的所有狀態可以用dfs。1 inc...