從給定的N個正數中選取若干個數之和最接近M

2021-06-09 06:03:37 字數 642 閱讀 3562

這道題跟撈魚問題一樣,都是剛進實驗室新生培訓那會兒做過的題目,不過這個是一師姐當時找工作的面試題。

如題,並輸出該子串行

測試用例:2,9,5,7,4,11,10

分別輸出最接近33、40、47、60的子串行

分析:n個數之和接近m,將m看做乙個容量的揹包,這個題目就變成了典型的01揹包,m容量下求最優解並輸出最優方案,這在01揹包中都整理過,上**:

#include using namespace std;

char state[11][101]; /* 設 n <= 10 m <= 100 記錄路徑 */

int dp[101]; /* 使用一維陣列01揹包 */

int value[11]; /* 本題可將費用與價值看做同一值 */

int i, j;

void main()

while(scanf("%d", &m) != eof)}}

printf("最接近值:%d\n",dp[m]);

/* 輸出方案 */

i = n;

j = m;

while(i-- >= 0)

}printf("\n");

}}輸出結果如下圖

從N個正數中選取若干個數之和最接近M(不能超過M)

這類題型是我們平時所常見的,粗看題目可能會覺得很像揹包問題,但是感覺狀態轉移方程又不是那麼容易就可以推出。其實,我們可以把m當作為揹包的容量,n個正數對應的陣列value n 既當作其價值,又當作其重量。此時的狀態轉移方程如下 當n 1,m value n 1 時 f n m f n 1,m f n...

如何從一堆數中選出若干個數,使其和等於給定的數?

如題,比如有一堆數 13,2,4,2,4,8,7,8,6 要從中挑選出若干個數,使得它們的和等於32,挑選出來的數是 20,6,4,2 我是使用 試探 法來解這個題目,思路如下 先對數進行排序 13,8,8,7,6,4,4,2,2 選出最大的數字,以及不大於目標數字後續數字,於是我挑選到了13,8,...

等概率無重複的從n個數中選取m個數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!問題描述 程式的輸入包含兩個整數m和n,其中m學習過概率統計的同學應該都知道每乙個數字被抽取的概率都應該為m n.那麼我們怎麼構造出這樣的概率呢?在 程式設計珠璣 上面是這樣解析的 依次考慮整數0,1,2,n 1,並通過乙個適當的隨機測試對每個整數...