輸入輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a1,a2……an的值。
輸出輸出不同的選擇物品的方式的數目。
遞迴方法
int ways1 = choice(v - vol[k - 1], k - 1); //選第k種,note:vol下標自0開始
int ways2 = choice(v, k - 1); //不選第k種
return ways1 + ways2
choice(40,3)=choice(20,2)+choice(20,2)=choice( 20,1)+choice(40,1)+choice(20,2)
=choice(0,0)+choice(20,0)+choice(40,1)+choice(20,2)
=1+0+choice(40,1)+choice(20,2)
=1+choice(40,1)+choice(20,2)=......
#includeint n;
int vol[20];
int ways = 0;
int choice(int v, int k)
}int main()
遞推:自邊界開始,計算每一種可能,儲存到二維陣列中。
#includeusing namespace std;
const int nmax = 20;
const int vmax = 41;
int n;
int vol[nmax];
int ways[vmax][nmax]; //二維陣列記錄,ways[i][j],從前j種物品中取出體積i的方法數;
int main()
ways[0][0] = 1; //note:for迴圈中i自1開始,補齊邊界;
P1195 口袋的天空
小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...
P1195 口袋的天空
給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試資料的 第一行有三個數n,m,k 1 n 1000,1 m 10000,1 k 10 接下來m個數每行三個數x,y,l,表...
luoguP1195 口袋的天空
標籤 雲端 難度 普及 提高 時空限制 1s 128mb 小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵...