牛客程式設計巔峰賽 共鳴問題(貪心)

2021-10-12 17:43:53 字數 1162 閱讀 4894

現在有n個音符和m對共鳴關係,編號為1~n,每個音符自己有乙個奏響時的優美程度,共鳴關係(x,y,z)表示音符x和y同時奏響的額外優美程度是z,同時不奏響則為-z,其他情況為0。

音符可以選擇奏響或者不奏響,不奏響的音符沒有優美程度。我們想知道最大的優美程度和是多少,我們不需要知道具體是哪些音符被奏響了,只需輸出最大和即可。

共鳴關係可能有重複,其共鳴效果也會重複疊加。

示例1

2,1,[-10,-10],[[1,2,5]]
-5
資料報括兩個數n,m,乙個長度為n的陣列a,表示每個音符奏響時的優美程度(a[0]表示第乙個音符),乙個第一維長度為m的二維陣列,描述m組共鳴關係。

輸出乙個整數表示答案。

n,m<=100000,所有的優美程度和額外優美程度的絕對值<=33000

思路:這個賽季最後一場巔峰賽打自閉了,但不得不說這道題出的很好啊,本以為是一道很難的題目,但是聽完賽後題解後發現真的是水題一道!

對於這道題一開始我是沒有思路的,以為是大頂堆瞎搞搞,但是搞來搞去找不到正確的貪心思想,而其實仔細想想我們發現這道題還是有東西可尋的,對於題目中的共鳴關係,我們發現當兩個音符同時敲響是共鳴效果是z,只響其中乙個的時候是0,兩個都不響的時候是-z,仔細思考下會發現,其實每次響乙個都會有z的共鳴效果,因此我們可以把繫結的問題轉化為單體問題,對於每個音符我們只需要考慮敲響他會增加多少共鳴效果即可,而這也是解決該題的關鍵所在。

class solution 

/*** **中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可

* * @param n int整型

* @param m int整型

* @param a int整型vector

* @param b int整型vector>

* @return long長整型

*/long long ans;

long long s[100005];

long long wwork(int n, int m, vector& a, vector>& b)

for(int i=0;ians+=max(s[i],0l);

return ans;

}};

牛客 共鳴問題 貪心 思維

題目大意 給出 n nn 個點,每個點都有點權,再給出 m mm 個關係,以 x,y,z x,y,z x,y,z 的形式給出,規定如下 同時選擇點 x xx 和點 y yy 將獲得 z zz 的代價 選擇點 x xx 或點 y yy 將不獲得代價 同時不選擇點 x xx 和點 y yy 將獲得 z ...

牛客程式設計巔峰賽S1 9

a.牛牛的字元反轉 題目描述 牛牛酷愛迴圈右移操作,但是牛牛的電腦暫存器壞掉了,無法實現正常的迴圈右移操作,只能實現區間反轉操作,現在牛牛有乙個長度為n的字串,他想進行迴圈右移k位的操作,你能告訴牛牛,他最少對這個字串進行幾次區間反轉操作能實現迴圈右移k位呢。反轉操作指字串某一區間 l,r 內的字元...

牛客程式設計巔峰賽 挑選方案問題(生成函式)

自助餐廳裡有5個盤子,裡面裝的都是麵包。第1個盤子裡有無限個麵包 第2個盤子裡只有1個麵包 第3個盤子裡只有4個麵包 第4個盤子裡也有無限個麵包,但必須兩個兩個地拿 第5個盤子裡也有無限個麵包,但必須5個5個地拿 給定正整數n,求有多少種正好拿出n個麵包的方案。方案a和方案b不同,當且僅當方案a存在...