美麗的牛家莊受到了外星人的侵略, 勇敢的妞妞要上戰場抵禦侵略。
在妞妞上戰場前, 村長牛牛給了妞妞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輸出例子1:30 30 30 30 0
50 0 0 0 0
0 50 0 50 10
0 0 50 0 20
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 3using
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 3using
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...