日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發(fā)布時間:2023/12/19 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 百练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)容還不錯,歡迎將生活随笔推薦給好友。