日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

百练2755:神奇的口袋(简单dp)

發(fā)布時間:2023/12/19 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 百练2755:神奇的口袋(简单dp) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

描述有一個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現(xiàn)在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。John可以從這些物品中選擇一些,如果選出的物體的總體積是40,那么利用這個神奇的口袋,John就可以得到這些物品。現(xiàn)在的問題是,John有多少種不同的選擇物品的方式。輸入輸入的第一行是正整數(shù)n (1 <= n <= 20),表示不同的物品的數(shù)目。接下來的n行,每行有一個1到40之間的正整數(shù),分別給出a1,a2……an的值。輸出輸出不同的選擇物品的方式的數(shù)目。樣例輸入

3
20
20
20

樣例輸出

3
 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n;
 9     int v[50];
10     int dp[50][50];//dp[i][j]表示從前j個物品中湊出體積為i的做法有多少種
11     cin >> n;
12     for (int i = 1; i <= n; ++i)
13     {
14         cin >> v[i];
15     }
16     memset(dp, 0, sizeof(dp));
17     //邊界條件:有物品,湊出體積為0的做法為1(一個物品都不放)
18     for (int i = 0; i <= n; ++i)
19     {
20         dp[0][i] = 1;
21     }
22     for(int i = 1;i<=40;++i)
23         for (int j = 0; j <= n; ++j)
24         {
25             dp[i][j] = dp[i][j-1];//不放第j個物品的放法
26             if (i >= v[j])
27             {
28                 dp[i][j] += dp[i - v[j]][j - 1];
29             }
30         }
31     cout << dp[40][n] << endl;
32     return 0;
33 }

總結(jié)

以上是生活随笔為你收集整理的百练2755:神奇的口袋(简单dp)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。