zoukankan      html  css  js  c++  java
  • HDU 2079-课程时间(生成函数)

    课程时间(标题已被修改,注意阅读题)

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2996    Accepted Submission(s): 2347


    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 <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cctype>
    #include <cmath>
    #include <cstdlib>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <list>
    #define maxn 250
    #define ll long long
    #define INF 0x3f3f3f3f
    #define pp pair<int,int>
    using namespace std;
    int a[maxn],b[maxn],v[10],p,num[10],n;
    void solve()
    {
    
    	memset(a,0,sizeof(a));
    	a[0]=1;
    	for(int i=0;i<n;i++)
    	{
    		memset(b,0,sizeof(b));
    		for(int j=0;j<=num[i]&&j*v[i]<=p;j++)
    			for(int k=0;k+j*v[i]<=p;k++)
    			b[k+j*v[i]]+=a[k];
    		memcpy(a,b,sizeof(b));
    	}
    	printf("%d
    ",a[p]);
    }
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d%d",&p,&n);
    		for(int i=0;i<n;i++)
    			scanf("%d%d",&v[i],&num[i]);
    		solve();
    	}
    	return 0;
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    python学习笔记(locust性能测试模块)
    python学习笔记(日志系统实现)
    python学习笔记(自定义库文件路径)
    python学习笔记(字典乱码)
    Django框架数据库模型
    Django框架学习笔记(windows环境下安装)
    zabbix自动化运维学习笔记(服务器配置)
    zabbix自动化运维学习笔记(服务器安装)
    tomcat相关漏洞复现
    sqli-labs学习笔记(基础篇)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4644580.html
Copyright © 2011-2022 走看看