描述
有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 51 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...