一道演算法題 勇敢的牛牛

2022-07-03 10:57:09 字數 2062 閱讀 3690

美麗的牛家莊受到了外星人的侵略, 勇敢的妞妞要上戰場抵禦侵略。

在妞妞上戰場前, 村長牛牛給了妞妞n件裝備, 妞妞需要選擇其中的k件,裝備在身上提公升自己的戰鬥力。每件裝備有5種屬性增幅值,對於第i件裝備它的屬性增幅值為(ri1, ri2, ri3, ri4, ri5), 分別代表該裝備對不同的屬性值增幅。

當妞妞裝備多件裝備的時候,由於裝備之前會互相影響, 對於每種屬性值的增幅並不是所有裝備該屬性值之和, 而是該種屬性值下所有裝備中最大的屬性值。而妞妞最終增加的戰鬥力為這5種屬性值增幅之和。

妞妞一定要保衛牛家莊, 所以她希望她能提公升盡可能多的戰鬥力, 請你幫幫她計算她最多能增加多少戰鬥力。

輸入描述:

輸入包括n+1行,

第一行包括兩個正整數n和k(1 <= n <= 10000, 1 <= k <= n), 分別表示一共有的裝備數量和妞妞需要選擇的裝備數量。

接下來的n行,每行5個整數ri1, ri2, ri3, ri4, ri5 (0 <= ri1, ri2, ri3, ri4, ri5

<= 10000)表示第i件裝備的5種屬性值增幅。

輸出描述:

輸出乙個整數,表示妞妞最多能增加的戰鬥力。
輸入例子1:

4 2

30 30 30 30 0

50 0 0 0 0

0 50 0 50 10

0 0 50 0 20

輸出例子1:

170
例子說明1:

妞妞要從4件裝備中選取2件, 如果妞妞選擇第1件和第3件裝備,那麼增加的戰鬥力為30 + 50 + 30 + 50 + 10 = 170, 這是最大的方案。

【分析】:沒有想到好辦法,m大於等於5時取各個屬性的最大值,m小於等於3時遍歷,m等於4時為防止超時,用一點小小的技巧即可通過。

當k >= 5的時,每一維屬性都取最大求和即可。

對於k < 5的時,預處理31種情況可能得到的最大的和。然後dfs列舉子集維護最大的答案即可。

【**】:

1 #include 2 #include 3

using

namespace

std;

4int

main()5;

9for (int i = 0; i < n; i++) 15}

16if (m == 1

) 22 result =max(result, temp);23}

24}25else

if (m == 2

) 32 result =max(result, temp);33}

34}35}

36else

if (m == 3

) 44 result =max(result, temp);45}

46}47}

48}49else

if (m == 4

) ;51

for (int p = 0; p < 5; p++)

57for (int k = 0; k < 5; k++) 61}

62 result =max(result, temp);63}

64}65}

66else70}

71 cout <72return0;

73}7475 冗長

1 #include 2 #include 3

using

namespace

std;

4int

main()510

1112

//////////////////////////////

13 #include 14

using

namespace

std;

1516

intn;

17int

main()

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...

一道演算法題

1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...

一道演算法題

include using namespace std const int size 5 int max sub array const int a,int n,int m int max matrix const int a size int row,int col,int subsize int...