加和求不同的組合方式數目(dp)

2021-07-15 22:39:41 字數 668 閱讀 3147

描述

有n個正整數,找出其中和為t(t也是正整數)的可能的組合方式。如:

n=5,5個數分別為1,2,3,4,5,t=5;

那麼可能的組合有5=1+4和5=2+3和5=5三種組合方式。

輸入輸入的第一行是兩個正整數n和t,用空格隔開,其中1<=n<=20,表示正整數的個數,t為要求的和(1<=t<=1000)

接下來的一行是n個正整數,用空格隔開。

輸出和為t的不同的組合方式的數目。

樣例輸入

5 5

1 2 3 4 5

樣例輸出

3

#include #include #include using namespace std;

int main()

; //dp[i][j]是第1個數到第i個數組成的和為j的總情況數

scanf("%d %d",&n,&t);

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

for(i=1;i<=n;i++)

dp[i][a[i]]=1;

for(i=1;i<=n;i++)

printf("%d\n",dp[n][t]);

}

和組合數有關的dp

1.用dp i r 表示,前i個盒子已經放完了,手上還拿著r對同色球。狀態轉移方程為 dp i 1 r a b dp i r comb r,a comb r a,b comb sum 2 r,c i a 2 b 2.見3.見 4.這題我記得我在還不會求逆元的時候就會了 乙個物品乙個物品考慮 每個是c...

求餘和除以的不同處境

輸入乙個正整數 1 2100000000 求該正整數的各位數字之和,如果各數字之和仍為兩位數及以上,繼續求其各位數字之和,直到數字之和為1位整數為止 在寫這道題的時候,對求餘和整除有了更深的理解,包括在計算裡兩者之間的運用都得小心,否則很容易出現錯誤 int sum int n while a 0 ...

4 變數和不同的賦值方式

變數的定義和使用 變數定義 cc gcc target hello.out 變數使用 target func.o main.o cc o target func.o main.o makefile 中變數的賦值方式 x foo y x b x new phony test test echo x x...