題目描述:
牛牛和 15 個朋友來玩打土豪分田地的遊戲,牛牛決定讓你來分田地,地主的田地可以看成是乙個矩形,每個位置有乙個價值。分割田地的方法是橫豎各切三刀,分成 16 份,作為領導幹部,牛牛總是會選擇其中總價值最小的乙份田地, 作為牛牛最好的朋友,你希望牛牛取得的田地的價值和盡可能大,你知道這個值最大可以是多少嗎?
輸入描述:
每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 75),表示田地的大小,接下來的 n 行,每行包含 m 個 0-9 之間的數字,表示每塊位置的價值。
輸出描述:
輸出一行表示牛牛所能取得的最大的價值。
輸入例子:
4 4
3332
3233
3332
2323
輸出例子:
2演算法思路
我已開始想不出來很好的思路,然後瞄了一眼其他人的解答,看了乙個找出最小的,然後合併行和列,直到最終結果是4行4列的思路,雖然我感覺這貪心不正確,然而我想到的窮舉法時間複雜度太高,就把這個思路實現了一下,一如神坑似海,花費了我2小時40分鐘debug+除錯+執行+提交**,結果還不是太。。。。
**如下:
// fentiandi.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
#include
using
namespace
std;
struct pos
pos(int a, int b) :i(a), j(b) {}
};void print(int ** arr, int n, int m)
cout
<< "\n";
}pos arrminpos(int ** arr, int n, int m)
}return minpos;
}int ** newarr(int n, int m)
void delarr(int ** arr, int n, int m)
delete arr;
arr = nullptr;
}int main()
if (n == 4 && m == 4)
else
if (n <= 3 || m <= 3)cout
<< "\nerror input !!!\n";
int tn = n, tm = m;
while (!(tn == 4 && tm == 4))
if (pmin.i < tn - 1)//和下一行合併,判斷是不是最後一行;
}if (tm > 4)//和左右列合併;
if (pmin.j < tm - 1)//和下一行合併,判斷是不是最後一行;
}int min1 = 800000, min2 = 800000, min3 = 800000, min4 = 800000;
print(arr, tn, tm);//測試**;
if (flag1)
if (flag2)
if (flag3)
if (flag4)
switch (choose)
}pos pmin = arrminpos(arr, 4, 4);
cout
<< arr[pmin.i][pmin.j] << endl;
/*for (int i = 0;i < n;++i)
*/fin.close();
return
0;}
網易2017校園招聘筆試題 計算糖果
a,b,c三個人是好朋友,每個人手裡都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的資訊 a b,b c,a b,b c.這四個數值.每個字母代表每個人所擁有的糖果數.現在需要通過這四個數值計算出每個人手裡有多少個糖果,即a,b,c。這裡保證最多只有一組整數a,b,c滿足所...
網易2013校園招聘筆試題
第一部分 必做 計算機基礎類 25分 所有選擇題都是多項選擇 1.2分 假設進棧次序是e1,e2,e3,e4,那可能的出棧次序是 a e2,e4,e3,e1b e2,e3,e4,e1c e3,e2,e4,e1 d e1,e2,e4,e3 2.2分 表示式x a b c d e的字尾表示形式可以是 a...
校園招聘(筆試)
第一次參加公司的校園招聘。週六早上迎著日落,坐著出租去機場,車子外面的風景仍舊,看到朝陽仍然是那麼的美,怪不得有好些人的名字以朝陽為名。到達目的地以後,下著小雨,天氣沒有那麼熱,正好帶的來衣服可以穿著。從機場打車出來,經過很長時間的計程車,終於到了賓館。安排下午的考試的內容。下午到達學校給教室裡面的...