程式設計題 地域劃分

2021-07-11 10:36:24 字數 1395 閱讀 7366

現在有一塊長條形的土地,這個土地我們可以看成是由n塊小方格連線而成的(這些小方格我們可以將之編號為1到n)。而我們需要將其劃分成兩個部分,分別種上不同的作物(即作物a和b),劃分必須在某兩個小方格之間進行,或者在土地的最左端或最右端,若劃分在第i塊到第i+1塊間進行,則劃分後,第1至第i塊地種a,剩下的地種b。現在有一些專家對土地進行了檢測,他們每個人評估了每塊土地適合種的作物。請你找到乙個合適的劃分,使得其與所有專家的評估最吻合,也就是說,你劃分到a而專家評估為b的次數和你劃分到b而專家評估為a的次數之和最小。

輸入描述:

每組資料給定乙個專家評估表land(其中0為評估a,1為評估b),以及小塊數量n(1≤n≤300),專家評估次數m(1≤m≤300)

輸出描述:

請返回你的劃分,即i和i+1。若在最左端,則輸出0,1;在最右端則輸出n,n+1。若有多解輸出最靠左的劃分。

輸入例子:

[[1,1,1,1],[0,0,0,0],[1,0,1,1]],4,3

輸出例子:

[0,1]

python解法

# -*- coding:utf-8 -*-

class

partition:

# land 二維list,每個項為專家給出的劃分,例如[[1,1,1,1],[0,0,0,0],[1,0,1,1]]

# 請函式返回乙個劃分的list,例如 [0,1]

defgetpartition

(self, land, n, m):

# write code here

# return [0, 1]

index = 0

min = 500

for i in range(n + 1):

sum = 0

for j in range(0, m):

sum += self.compare_block(land[j], i)

if sum < min:

index = i

min = sum

res =

return res

defcompare_block

(self, block, sp):

sum = 0

ll = len(block)

for i in range(sp):

if block[i] == 1:

sum += 1

for i in range(sp, ll):

if block[i] == 0:

sum += 1

return sum

408真題 劃分序列

已知由n個正整數構成的集合a,將其劃分為兩個不想交的子集a1和a2,元素個數分別是n1和n2,a1和a2中的元素之和分別為s1和s2,設計乙個盡可能高效的演算法,滿足 n1 n2 最小且 s1 s2 最大。n2 n1最小即為兩子串行各為一半,且一半的所有元素比另外一半的任意元素都要小 此處可利用快速...

程式設計日誌的等級劃分

在不同的版本中日誌的分級也有區別,下面以日誌記錄器logger的分類來進行討論 六個日誌等級 trace debug info warning error fatal 還有兩個特殊等級 all off,全部日誌開啟和關閉,這裡不做討論 info info 報告程式進度和狀態資訊。一般這種資訊都是一過...

每日一題 整數劃分

title 每日一題 整數劃分 date 2019 10 27 17 15 16 tags 91.整數劃分 15分 c時間限制 2 毫秒 c記憶體限制 65535 kb 題目內容 對於乙個正整數n的劃分,就是把n變成一系列正整數之和的表示式。注意,分劃與順序無關,例如6 5 1跟6 1 5是同一種分...