2.7.1 minimum scalar product
題述:有兩個向量 v1=和 v2 =,允許任意交換 v1和v2各自的分量的順序。請計算 v1 和 v2的內積
x1y1+。。。+ xnyn 的最小值。
題解:@1:如果我們先固定 v1的排列順序,之後列舉 v2的排列,之後計算彙總求最小值,這樣的話 複雜度為 o(n!*n) ,這是非常大的,如果n很大,我們很容易超出時間限制。
@2:我們直覺將 v2 按照降序排列, v1按照公升序排列,我們使用 n=2進行證明這一觀點,(這時 x1>x2, y1y1 + x2y2 x1y2 + x2y1 ,我們很容易看出 第二組更小。
這時我們推至 n > 2 ,依舊可以很清楚看到 第二組情況最小。
這時提一句: v1 公升序,v2降序 和v2公升序,v1降序得到的結果是相同的。?
**如下:
using ll=
long
long
;ll getmininnerproduct
(vector<
int>
&ivec1,vector<
int>
&ivec2));
ll innerproduct=0;
for(
decltype
(ivec1.
size()
) i =
0; i !=ivec1.
size()
;++i)
return innerproduct;
}
2.7.2 crazy rows
題述:給定乙個由 0 和 1 組成的方格矩陣。 只允許交換相鄰的兩行 (第 i 行 和 第 i+1 行),要把矩陣化成下三角矩陣 (主對角線上方的元素都是 0 )最少需要交換幾次? 輸入的矩陣保證總能化成下三角矩陣。
1111
111010
001100
=》 1100
=》。。。。 110
01000
110011
001000
110011
10
1<=n<=40
題解:
策略:我們能夠清晰的看出 僅僅保證 正對角線上的數字為1,且其右上方的數字都為0即可
解決辦法:
第一行: 第乙個元素為1或0,其餘為0
第二行:第二個元素為1或0, 第二個元素前面為任意,其餘為0
第三行:第三個元素為1或0,前面任意,其餘為0
由此我們得出:我們僅僅記錄每一行最後乙個1的位置即可(無1記錄為 -1 ),之後呢,我們迴圈該存放每一行最後的1位置的陣列,
每一步都找從該行開始的小於等於 當前行號的角標,進行逐步交換累加步數。
const
int n =4;
const vectorint>> m,,
,};vector<
int>
posvec
(n,-1)
;void
solve()
}for
(int i =
0; i!= n;
++i)
}//完成交換
for(
int j = pos; j > i ;
--j));
cout<++res;}}
cout<< res;
}
2.7.3 brige the prisoners
題述:如下圖,乙個監獄裡有 p 個併排著的牢房。 從左至右一次編號為 1,2,。。。。。p。最初所有的牢房裡都住著乙個囚犯。相鄰的兩個牢房之間有乙個窗戶,可以通過它與相鄰牢房裡的囚犯對話。
123
4 p
【1】| 【1】 |【1】|【1】|【。。。。】 |【1】
【】:代表牢房, | :代表窗戶
監獄的情況
現在要釋放一些囚犯,如果釋放某個牢房裡的囚犯,其相鄰的牢房裡的囚犯就會知道,因而發怒暴動。所以,釋放某個牢房裡的囚犯同時,必須要賄賂兩旁相鄰牢房裡的囚犯一枚金幣。
另外,為了防止釋放的訊息在相鄰牢房間傳開,不僅兩旁直接相鄰的牢房,所有可能聽到訊息的囚犯,即直到空牢房為止或直到監獄兩端為止,此間的所有囚犯都必須給一枚金幣。
釋放
空牢房 1 牢房最右側端
。。。|【】|【1】|【1】|【1】|【】|【1】【1】【1】
\ /
\ /
都必須給一枚金幣
現在要釋放 a1,a2,。。。。aq號牢房裡的 q 名囚犯,釋放的順序還沒確定。如果選擇所需金幣數量盡量少的順序釋放,最少需要多少枚金幣?
題解:
在這裡插入**片
2.7.3 millionaire
題述: 你被邀請到某個電視節目中取玩下面這個遊戲。一開始你有 x 元錢,接著進行 m 輪賭博。每一輪,可以將所持的任意一部分錢作為賭注。堵注不光可以是整數,還可以是小數,一分錢不壓和全壓都沒有關係,每一輪都有 p 的機率可以贏,贏了賭注就會翻倍, 輸了賭注就沒了,如果你最後持有 1000000 元以上的前的話,就可以把這些錢帶回家。 請計算當你採取最優策略時,獲得 1000000元以上的錢並帶回家的概率。
限制條件:
輸入: m=
1,p=
0.5,x=
50000 輸出 0.500000 (一開始全壓)
題解:
在這裡插入**片
一起來挑戰Google code jam 一
給你兩個陣列va和vb,兩個陣列的元素對應相乘,然後求和,要求和最小,在陣列元素順序可以調整的時候。這裡主要用到乙個不等式,x和y兩個公升序的陣列,那麼sum x i y i sum x i y n i void fun printf d n res 題意是給你一排p個牢房,最初的時候每個牢房中有乙...
一起來學習Ant Design
當然,都屬於webpack中的基礎知識,但是套上了atool build這樣乙個殼子,又有點小懵。還好不是很難,嘗試後,很快搞定了,順手也總結一下吧!一 安裝ant init 1 npm install antd init g 二 建立目錄 1 mkdir antd demo cd antd dem...
一起來存方法
1.在動態渲染元素的時候,需要邏輯判斷 在迴圈渲染dom元素時,迴圈遍歷中需要邏輯操作,如果不使用模板 1 var addlist function 7 if 條件2 10lists.push list 11 12 id html lists.join 13 這是在看一同事 時,發現她用push和j...