分禮物演算法
① 動態規劃分配禮物問題
思想:
1:對禮物的價值排序,採用快速排序,從價值大到小排序。
2:主體思想:
2.1初始化:把第一個禮物分給Alan, 第二個禮物分給Bob,並以a、b紀錄2者的個人的總價值
2.2:循環以下動作,直到分配結束:
if a<=b,把下一個禮物分給Alan
else ,把下一個禮物分給Bob
復雜度:排序復雜度為O( n*logn ),核心演算法復雜度:O( n ),所以總體復雜度為O( n*logn )。
思想:沒有按照你要求的動態規劃的思想方法,而是採用了貪心演算法,貌似要比動規簡便。
② 三個人同時分3種禮物幾種分法
如果是保證每人1個話,一共有6種方法。
比如:有三個人分別是甲乙丙。三個禮物分別為ABC。
甲→A,乙丙分BC,有兩種。
甲→B,乙丙分AC,有兩種。
甲→C,乙丙分AB,有兩種。
一共就是六種!
③ 有5個禮物,三個人全部分到有多少種分法
六種
(1,1,3)有三種,即每個人分到三代表一種,三個人共三種
(2,2,1)有三種,即每個人分到一代表一種,三個人共三種
故共六種
④ 把5件相同的禮物全部分給3個小朋友,使每個小朋友都分到禮物,分禮物的不同方法一共有幾種(求過程)
先每人拿一件禮物,還剩兩件禮物,兩件禮物合起來送一人有三種方法,分開送兩人有三種方法,所以一共六種方法
⑤ 關於禮物分配演算法
#include<iostream>
using namespace std;
int main()
{
cout << "請輸入n"<<endl;
int n;
cin>>n;
int *pn=new int[n];//輸入禮物個數
float *pValue = new float[n]; //禮物價值
float *pValue1 = new float[n];//第一個人的禮物價值
float *pValue2 = new float[n];//第二個人的禮物價值
cout << "輸入價值" <<endl;
for (int i = 0; i < n ; i ++) //將所有的值存起來
{
cin >> pValue[i];
}
int row1 = 0;
int row2 = 0;
float fvalue1 = 0;
float fvalue2 = 0;
for (int j = 0; j < n ; j ++)
{
if (fvalue1 <= fvalue2)
{
pValue1[row1] = pValue[j];
fvalue1 += pValue1[row1];
row1 ++;
}
else
{
pValue2[row2] = pValue[j];
fvalue2 += pValue2[row2];
row2 ++;
}
}
cout <<"第一個"<< fvalue1 << endl;
cout <<"第二個"<< fvalue2 << endl;
delete[] pn;
delete[] pValue;
delete[] pValue1;
delete[] pValue2;
pn = NULL;
pValue = NULL;
pValue1 = NULL;
pValue2 = NULL;
return 0;
}
⑥ 六一兒童節老師准備6分禮物,分給麗麗,紅紅,軍軍,每人至少分一分,有幾種分法
您好,如果每一份禮物都不一樣的話,可以分的方法有12種分法,如果禮物都是一樣的,平均分配的話也就一種,每人兩份
⑦ 排列組合:將5件不同的禮物全部分給甲乙丙丁4人,且每人至少有1件禮物,有多少種不同的分法
先將5件不同的禮物分成4堆,每堆至少有1件禮物,至多2件禮物,有C(5,2)=10種分法,然後針對每種分法,分給甲乙丙丁4人,即4的全排列:P(4,4)24,所以共有:24X10=240種不同的分法。