一道演算法題目的解法

2021-04-14 02:21:00 字數 1435 閱讀 7853

有這樣一道演算法題目:

144張牌放到若干的盒子中,

每個盒子中放10到

40張,

問有多少種放法?(不考慮順序)

由144/10=14.4

,144/40=3.6

可得,盒子的數量最少為4,

最多為14.

假設有n個盒子(

4<=n<=14),

每個盒子中分別放

a1, a2, …, an

張牌,由於不考慮順序,

不妨設a1

<=a2

<= … <=an.

然後可以根據盒子的數量進行窮舉,

從而得出答案。

考慮到14個盒子的情況,

30^14

是個很可觀的數字,

為了提高演算法的效率,

需要計算

ai(1<=i<=n)

的最大和最小值。

容易得出 ai

最小的情況是

a1=…=ai, ai+1=…=an=40

min(ai)=(144 – (n-i)*40)/i

ai最大的情況

a1=min(a1) a2= min(a2)…ai-1= min(ai-1), ai= ai+1=…=an

max(ai)=(144-min(a1)-min(a2)-...-min(ai-1))/i

#include

#include

#define count 144

#define maxval 40

#define minval 10

int count = 0;

int** minvals;

int** maxvals;

void get_min_max_vals ()

max = (count - temp) / (i - j);

maxvals[i - 4][j] = max > maxval ? maxval: max;

}

}

}

void calc (int cur, int total, int* vals)

if ((last >= vals[cur - 1]) && (last <= maxval))

return;

}

if (0 == cur) else

for (i = from; i <= maxvals[total - 3][cur]; i++)

}

int main()

printf ("total=%d/n", totalcount);

for (j = 0; j < 11; j++)

free(minvals);

free(maxvals);

return 0;

}

一道簡單題目的複雜演算法

這是我們第一節彙編上機的實驗題目,問題描述 在debug下實現,記憶體區2100h處有乙個位元組帶符號數 用e命令存入 要求程式設計將其取出1 若此數為正,則3000h單元置01h,2 若此數為0,3000h單元置0h,3 若此數為負,3000h單元置ffh。題目很簡單,應該說簡單得讓人做著無聊,於...

一道ACM題目的反思

大三本科,成績還算不錯 很不自謙的說 所有程式設計實驗做的津津有味,亦常為同學捉刀,最近的圖形學實驗寫了4600行c 自命程式設計能力還是不錯的。可自大一來嘗試acm便屢屢受挫,鬱鬱不得志,中途因課業緊張未能堅持 壓根沒正兒八經的做過幾道題 也自覺智商平平,無甚希望。最近在考研與工作間猶豫不決,無聊...

一道線代題目的總結

線性方程組 1 x1 2x2 3x3 4x 4 其中,i i 1 2,3 4,均是四維列向量,有通解 k 2,3 1,0 t 4,1 0,3 t三個小題 1 是否能由 2 3,4線性表出,若能,錶出之否則說明理由。分析 給定的是通解結構,我們能從中發現很多資訊。首先這是乙個非齊次方程組的通解。題幹給...