20 21 24 29 36 45 56 69 84 101 120 141 164 189 16 45 76 109 144 181 20 61 104 149 196 45 96 149 4 61 120 181 44 109 176 45 116 189 64 141 20 101 184 69 156 45 136 29 124 21 120 21 124 29 136 45 156 69 184 101 20 141 64 189 116 45 176 109 44 181 120 61 4 149 96 45 196 149 104 61 20 181 144 109 76 45 16 189 164 141 120 101 84 69 56 45 36 29 24 21
184 184 189 189 189 189 196 196
#include
#include
typedef struct wrap_data
wrap_data;
int choosevec(int path)
else if (path<=8)
else if(path<=16)
else
}wrap_data **vec;
int vecsize;
void up ( int num )
if ( first->path==second->path)
else if ( *( second->data )> *( first->data ))
else }}
int main()
;wrap_data a[path]=;
int label=0;
vecsize=2* choosevec(path);
vec=(wrap_data **)calloc( vecsize ,sizeof (wrap_data*));
for(i=0;ifor(i=0;ik=vecsize/2;
for(i=0;i
while(label data))
else
label++;
}//dump
printf("\n");
i=0;
while(i++data));
vec[0]=0;
*(result->data)=max_big;
up (result->path+k);
從n個數中選擇k個數
這是組合問題,組合問題有幾種寫法,且時間複雜度位o n 2 1 暴力迴圈,適用於固定的k 比方從7個數中找兩個數 int main sort nums.begin nums.end int count 0 for int i 0 i nums.size i cout count 2 當前數選不選,遞...
從m個數中選擇n個數的實現
從m個數中選出n個數來 0 n m 要求n個數之間不能有重複,其和等於乙個定值k。求一段程式,羅列所有的可能。例如備選的數字是 11,18,12,1,2,20,8,10,7,6 和k等於 18 那麼組合的可能有 18 8,10 2,20 12,6 11,7 11,1,6 1,10,7 12,2,8 ...
從M個數中選擇前N大的數
如果對m個數字全排列,1 用簡單排序演算法,例如氣泡排序,時間複雜度m m 2 用快速排序 最壞時間複雜度度蛻化為m m 堆排序歸併排序 平均時間負責度為m logm 此處,需要選擇前n大的數,用氣泡排序,迴圈次數為n,時間複雜度為m n 如果是海量資料呢?筆試時經常碰到這樣類似的題目 從100w個...