題意:平面直角座標系中有n個整數點(xi,yi),再找出乙個可以與其他點重合的整數點(x,y),使得該點到n個點的距離之和最短。
這裡的距離不是歐式距離,而是橫座標之差的絕對值加上縱座標之差的絕對值。即若a(x1,y1),b(x2,y2),則dist(a,b)=|x1-x2|+|y1-y2|。
輸出距離之和的最小值以及有多少個整數點可以被選擇使得取到最小值。
對於一維上的,即給出x1...xn,找乙個合適的a值,使得s=|a-x1|+...+|a-xn|最小,這個問題應該是非常經典的。
結論是這樣的:按xi的值排序得到新序列x'1...x'n,若n是奇數,則a應取x'[(n+1)/2],否則a的取值應該介於x'[n/2]和x'[n/2+1]。
對於n是偶數的情況,當a介於x'[n/2]和x'[n/2+1]時,s=(x'n-x'1)+(x'[n-1]-x'2)+...+(x'[n/2+1]-x'[n/2])。
否則,當a不介於該區間,一定有|a-x'[n/2]|+|a-x'[n/2+1]|>(x'[n/2+1]-x'[n/2]),而其餘項的值也不會更小,故此時的s值不是最小的。
對於n是奇數的情況,由於當a=x'[(n+1)/2]時,|a-x'[(n+1)/2]|=0,任何非該值的a都會使得結果大於0,同時其餘項的值也不會更小。
其餘項的值不會更小是因為有|a-xi|+|a-xj|≥|xi-xj|。
對於二維的情況,顯然這裡的x和y是可以分離開來分別做的。距離之和的最小值是容易求得的。
這裡還需要輸出有多少個可選的點,當n為奇數時應該只有1個,當n為偶數是,同樣回歸到一維的情況。
由於a是整數並且介於x'[n/2]和x'[n/2+1],顯然可以有x'[n/2+1]-x'[n/2]+1個方案。
再推廣到二維的情況,只要將兩邊的結果都求出來,然後根據乘法原理相乘即可。
**:
#include#includeusing namespace std;int x[10005],y[10005];
int n,i,j,k,t;
int abs(int a)
int main()
矩陣的秩最小化
為了求解問題 因為它是非凸的,我們求解乙個它的近似演算法 對於乙個大的 值,它可以用下列等式接近 其中第一項為核正規化 奇異值的和 第二項為frobenius正規化。singular value thresholding svt 奇異值閾值 奇異值收縮 singular value shrinkag...
C 最小化到托盤的方法
1.在窗體設計的工具箱中拖出乙個notifyicon 自動命名為notifyicon1,如有需要可以更改名字,這個控制項是最小化到托盤的圖示,可以先將它的icon屬性設定為你自己的圖示。2.建立窗體resize方法。private void mainform resize object sender...
最小化設計(盡早實現)的時機
在 關於最小化設計 盡早實現 的一些想法 一文中,我們清楚了什麼是最小化設計 盡早實現 但是只知道what還不足以讓我們正確的實施它,那今天的話題就是when where 時機。上文我們提到了最小化設計 盡早實現 的兩個方面,抽象和實現,在此我們也同樣分開討論。1 抽象的時機。日積月累的醜陋設計 違...