抽籤問題:
你的朋友提議玩乙個遊戲:將寫有數字的n
個紙片放入口袋中,你可以從口袋中抽取
4次紙片,每次記下紙片上的數字後都將其放回口袋中。如果這
4個數字的和是
m,就是你贏,否則就是你的朋友贏。
請你編寫乙個程式,判斷當紙片上所寫的數字是k1,k2,... ,kn時,是否存在抽取4
次和為m
的方案。如果存在,輸出為
yes;否則,輸出為no。
限制條件:
1<=n<=50
1<=m<=10^8
1<=ki<=10^8
樣例輸入
3 10
1 3 5
第一行代表n,m
,第二行代表ki
樣例輸出:
yes例如當4
次抽取的結果是
1,1,3,5
,和就是
10因為n
的範圍較小,首先想到的便是使用簡單的
4重迴圈,及窮舉思想。以下是實現**:
/*
* this file is to solve the draw_lots problem
* compiled by g++
* date:2015-05-06
* version:0.1
* author:zhang
*/#include using namespace std;
const int maxn = 50;
int main()
int flag=0;
//four loops
for(int a = 0;a < n; a++)
for(int b = 0;b < n; b++)
for(int c = 0;c < n; c++)
for(int d = 0;d < n; d++) }
if(flag)
else
return 0;
}
整個演算法的時間複雜度是o(n^4),當
n值較大時,就應該考慮一下優化問題了。這個優化將在抽取問題(續)中分享與討論。
版)
暴力列舉演算法的優化 抽籤問題
將寫有數字的n個紙片放入口袋中,你可以一次從口袋抽取4次紙片,每次記下紙片的數字後將其放回口袋。如果這4個數字的和是m,那麼你就贏了,否則你就輸了。編寫程式,判斷當紙片上的數字是k1,k2,kn時,是否存在抽取4次和為m的方案。如果存在,輸出yes 否則輸出no.限制條件,資料規模 1 n 1000...
抽籤問題(不斷優化)
問題描述 假設存在n個籤,通過抽取四次,如果四次抽取的和為m即勝利。初始解 1 for int a 0 a n a 212 13 14 難度增加,將n的限制條件為1 1000,此時,四重迴圈明顯複雜度過高,需改進演算法。上面所記載的程式的迴圈部分。最內側關於d的迴圈所做的事就是 檢查是否有d使得 通...
演算法小題 最大連續子串行和問題
解法二解法三 解法三 番外版 實驗結果 刷題的時候遇到了這個最大連續子串行和的問題,查閱研究了一下。記錄在此。希望能夠便人便己。給定乙個陣列a n 陣列元素均為自然數集 有正數,有負數 請求出該陣列乙個連續的子串行,使得這個子串行的和值最大,示例如下 a 那麼它的最大連續子串行為 和值 23 說明 ...