程式設計思維與實踐 Week3 作業A 選數問題

2021-10-03 14:57:03 字數 1267 閱讀 3326

輸出:思路:

出現的錯誤:

**:給定n個正整數,從中挑出k個,使得這k個數的和為s,程式設計求出有多少種取數方案。

第一行給出乙個正整數t(t<=100),表明有t組資料。接下來,每一組資料佔兩行,第一行給出題意中所述三個數n,k,s;第二行給出n個正整數。

1103

10123

4567

8910

對每一組資料輸出乙個整數,表示方案個數,每組輸出佔一行。

4
該問題要從n個數選出k個,並使其和為s,對於每個數都有選與不選兩種情況,所以有2^n種情況,但列舉的複雜度過高,需對其中不合理的情況直接排除,如:和已經大於s,或者數的個數大於k。這些情況在選擇過程中就可以排除。因此,使用遞迴的方法,依次對n個數進行選與不選的判斷,對於遞迴過程中的不合理情況直接回到上一級,停止該遞迴支路,對於滿足條件的情況,則計數變數+1,同時返回上一級,直到選擇完所有資料。

在結束前一組資料的選擇後,未對儲存n個數的容器進行清空,使得前一組資料影響下一組資料導致出現錯誤。

#include

#include

using

namespace std;

int n,m,sum;

vector<

int> val;

int count=0;

void

select

(int i,

int thesum,vector<

int>

&arr)

if(i>=n||thesum<0)

return

;select

(i+1

,thesum,arr)

; arr.

push_back

(val[i]);

select

(i+1

,thesum-val[i]

,arr)

; arr.

pop_back()

;}intmain

(int argc,

char

** ar**)

select(0

,sum,arr);if

(i==0)

printf

("%d"

,count)

;else

printf

("\n%d"

,count);}

return0;

}

程式設計思維與實踐 Week3 作業

b 區間選點 貪心 c 區間覆蓋問題 貪心 給出n個正數,從其中選出k個數,使其總和為s,問 有多少種選數方案?input 第一行是正數t t 100 表示測試的組數。每一組都輸入兩行,第一行是三個整數n,k,s,第二行是n個正整數。output 每一組輸出結果佔一行,為方案的數目。sample i...

程式設計思維與實踐 Week3 作業

給定n個正數,從中選出k個數,令其和為s,求選數的方案數。對於每乙個數選擇與不選擇都進行dfs 邊界條件 選中k個數且和為s 選中數的個數大於k 選中數的和大於s 要選的數越界了 include using namespace std int ans 0 int a 2000 int n,k,s v...

程式設計思維與實踐 week3

題目 題意 給定n個正整數,要求選出k個數,使選出來的k個數和為sum,共有多少個方案?輸入 第一行乙個數t t 100 表示有t組測試資料。接下來的兩行,一行有三個數n,k,s,一行有n個正整數。輸出 每組資料輸出乙個和為s的方案個數,每組佔一行。思路 dfs 可行性剪枝 子集列舉問題。列舉所有子...