本題可以利用01揹包+多重揹包來解決,也可以利用母函式來解決,博主本著能用數學方法解就不暴力的原則,學習了一下母函式來解決了一下這道題。其中,母函式又叫生成函式,關於它的講解請參考這篇文章:
關於母函式的實現,可以看我的**,裡面注釋很詳細,都是我根據自己理解重新注釋的
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define clean(n,m) memset(n,m,sizeof(n))
#define ll long long
using namespace std;
int main()
clean(c1, 0);
//對c1初始化,由第乙個表示式初始化,把從1
*sub[1]到num[1]*sub[1]各項(或從1
*sub[1]到num[1]*sub[1]各項中直到能達到學分要求的項)的係數都賦成1
for (int i = 0, t = 0;i <= n&&t <= num[1];i=i+sub[1],t++)
//對c2初始化,全部賦0
for (int i = 0;i <= n;i++)
//從第二個式子開始,直到遍歷完m個式子
for (int i = 2;i <= m;i++)
}//把c2的值賦給c1,把c2賦成0,因為c2每次是從乙個表示式中開始的
for (int j = 0;j <= n;j++)
}cout << c1[n] << endl;
}return
0;}
HDU 2079選課時間 (母函式)
其實思路是挺簡單的,直接母函式的模板套用即可,主要是粗心的緣故吧,少些了點東西,後來反覆built才弄好 include include include include include using namespace std 選課時間 問n個學分有多少種組合,認為學分一樣的課沒區別 input 輸入...
HDU2079 選課時間
problem description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。xhd認為一樣學分的課沒區別 input 輸入資料的第一行是乙個資料t,表示有t組資料。每組資料的第一行是兩個整數n 1 n 40 k 1 k 8 ...
K 選課時間 HDU 2079
k 選課時間 hdu 2079 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。xhd認為一樣學分的課沒區別 input 輸入資料的第一行是乙個資料t,表示有t組資料。每組資料的第一行是兩個整數n 1 n 40 k 1 k 8 接著有k...