【杭电oj】2079 - 选课时间(母函数)
2016-07-21 16:17
323 查看
点击打开题目
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4083 Accepted Submission(s): 3190
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)
因为同样分数的课程在他看来都一样,所以仍然是母函数。
注意题目要求修 n 分,大于 n 分的不要。
#include <cstdio>
#include <cstring>
int main()
{
int n,k,u;
int ant[10];
int c[44];
int t[44];
scanf ("%d",&u);
while (u--)
{
memset (ant,0,sizeof (ant));
memset (c,0,sizeof (c));
memset (t,0,sizeof (t));
scanf ("%d %d",&n,&k); //修n个学分,k门课
for (int i = 1 ; i <= k ; i++)
{
int t1,t2;
scanf ("%d %d",&t1,&t2);
ant[t1] = t2;
}
for (int i = 0 ; (i <= ant[1]) && (i <= 40) ; i++)
c[i] = 1;
for (int i = 2 ; i <= 8 ; i++)
{
for (int j = 0 ; j <= 40 ; j++)
for (int k = 0 ; (k <= ant[i] * i) && (k+j <= 40) ; k += i)
t[j+k] += c[j];
for (int j = 0 ; j <= 40 ; j++)
{
c[j] = t[j];
t[j] = 0;
}
}
printf ("%d\n",c
);
}
return 0;
}
选课时间(题目已修改,注意读题)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4083 Accepted Submission(s): 3190
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)
因为同样分数的课程在他看来都一样,所以仍然是母函数。
注意题目要求修 n 分,大于 n 分的不要。
#include <cstdio>
#include <cstring>
int main()
{
int n,k,u;
int ant[10];
int c[44];
int t[44];
scanf ("%d",&u);
while (u--)
{
memset (ant,0,sizeof (ant));
memset (c,0,sizeof (c));
memset (t,0,sizeof (t));
scanf ("%d %d",&n,&k); //修n个学分,k门课
for (int i = 1 ; i <= k ; i++)
{
int t1,t2;
scanf ("%d %d",&t1,&t2);
ant[t1] = t2;
}
for (int i = 0 ; (i <= ant[1]) && (i <= 40) ; i++)
c[i] = 1;
for (int i = 2 ; i <= 8 ; i++)
{
for (int j = 0 ; j <= 40 ; j++)
for (int k = 0 ; (k <= ant[i] * i) && (k+j <= 40) ; k += i)
t[j+k] += c[j];
for (int j = 0 ; j <= 40 ; j++)
{
c[j] = t[j];
t[j] = 0;
}
}
printf ("%d\n",c
);
}
return 0;
}
相关文章推荐
- liferay中css的自定义导入
- kmp算法
- Uncowed Forces
- spring整合quartz
- Win7下WinDbg开启Local Kernel Debug调试
- Log4net配置
- CodeForces 1B Spreadsheets(模拟)
- ubuntu安装python mysqldb模块
- MFC STATIC,Picture控件使用及无法添加变量的问题
- 解读 C 语言中的指针
- python_基础学习_04_mysql库验证与安装(mysql-python,mysql.connector)
- 个人对构造函数理解
- 联表查询和生成二维码的接口
- C语言 函数小总结
- jQuery 之 ajax 的状态函数(15)
- String类的用法
- 前端问题
- 《深入浅出MFC》– MFC程序的生死因果
- char src[]与char *src的区别
- http://blog.csdn.net/luanlouis/article/details/41576373