程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [ACM] hdu 2079 選課時間(普通型母函數)

[ACM] hdu 2079 選課時間(普通型母函數)

編輯:C++入門知識

Problem Description

又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別)


Input

輸入數據的第一行是一個數據T,表示有T組數據。
每組數據的第一行是兩個整數n(1 <= n <= 40),k(1 <= k <= 8)。
接著有k行,每行有兩個整數a(1 <= a <= 8),b(1 <= b <= 10),表示學分為a的課有b門。


Output

對於每組輸入數據,輸出一個整數,表示學n個學分的組合數。


Sample Input

2
2 2
1 2
2 1
40 8
1 1
2 2
3 2
4 2
5 8
6 9
7 6
8 8


Sample Output

2
445


Author

xhd


Source

ACM程序設計期末考試_熱身賽(感謝 xhd & 8600)


代碼:

#include 
#include 
using namespace std;

int c[45],temp[45];
int a[11],b[11];

int main()
{
    int t;cin>>t;
    int n,k;
    while(t--)
    {
        cin>>n>>k;
        for(int i=1;i<=k;i++)
            cin>>a[i]>>b[i];
        for(int i=0;i<=n;i++)
        {
            c[i]=0;
            temp[i]=0;
        }
        c[0]=1;
        for(int i=1;i<=k;i++)
        {
            for(int j=0;j<=n;j++)
                for(int k=0;k+j<=n&&k<=b[i]*a[i];k+=a[i])//第i種學分的課總的學分(即指數)
            {
                temp[j+k]+=c[j];
            }
            for(int j=0;j<=n;j++)
            {
                c[j]=temp[j];
                temp[j]=0;
            }
        }
        cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved