題目:
乙個袋子裡面有n個球,每個球上面都有乙個號碼(擁有相同號碼的球是無區別的)。如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。
例如:如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以適當從袋子裡移除一些球(可以移除0個,但是別移除完),要使移除後的袋子是幸運的。現在讓你程式設計計算一下你可以獲得的多少種不同的幸運的袋子。
輸入描述:
第一行輸入乙個正整數n(n ≤ 1000)輸出描述:第二行為n個數正整數xi(xi ≤ 1000)
輸出可以產生的幸運的袋子數示例1
31 1 1
2分析:
#include #include #include using namespace std;
//從n個小球的袋子v中,到pos位置,計算滿足子集個數
//sum、multi是到pos位置的和、積
int get_lucky_blaket(vector&v, int n, int pos, int sum, int multi)
else if (v[i] == 1)//不滿足,並且當前是1
else//不滿足
//從下乙個位置開始時扔掉前面的袋子
sum = sum - v[i];
multi = multi / v[i];
//去掉重複的
while (i + 1> n;
vectorv(n);
for (int i = 0; i> v[i];
} sort(v.begin(), v.end());
cout << get_lucky_blaket(v, n, 0, 0, 1) << endl;
return 0;
}
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...
幸運的袋子
乙個袋子裡面有n個球,每個球上面都有乙個號碼 擁有相同號碼的球是無區別的 如果乙個袋子是幸運的當且僅當所有球的號碼的和大於所有球的號碼的積。例如 如果袋子裡面的球的號碼是,這個袋子就是幸運的,因為1 1 2 3 1 1 2 3 你可以適當從袋子裡移除一些球 可以移除0個,但是別移除完 要使移除後的袋...