hdu——2079——选课时间(题目已修改,注意读题)

来源:互联网 发布:三盛网络机柜 编辑:程序博客网 时间:2024/06/09 16:47
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

#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int dp[200000];int main(){int t;cin>>t;while(t--){int n,k;scanf("%d%d",&n,&k);int v[20],num[20];memset(dp,0,sizeof(dp));dp[0]=1;for(int i=1;i<=k;i++)scanf("%d%d",&v[i],&num[i]);for(int i=1;i<=k;i++){for(int j=n;j>=v[i];j--){for(int k=1;k<=num[i];k++){if(v[i]*k<=j)dp[j]=dp[j]+dp[j-v[i]*k];}}}printf("%d\n",dp[n]);}return 0;}


0 0
原创粉丝点击