Crisis of HDU

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4258    Accepted Submission(s): 1197

Problem Description
话说上回讲到HDU大战东洋小苟,结果自然是中方大胜,这一战也使得海东集团在全球同行业中的地位更加巩固。随着集团的发展,很多创业时期的元老逐步功成身退,先是8600移民海外,然后是linle夫妇退隐山林,逐渐的,最初众多的元老只剩下XHD夫妇和Wiskey三人了。
到了2020年,因为扩张过度加上老鼠数量逐年减少,公司的发展遇到了前所未有的危机,此时集团已经没有任何流动资金,更可怕的是,这个时候,wiskey也决定退出了!
退出本身并不麻烦,麻烦的是,退出的人需要取走相应比例(1/3)金额的资产。
假设公司此时一共有n种价值的资产,每种价值的资产数量已知,请帮助心烦意乱的XHD夫妇计算一共有多少种分割资产的方法。
Input
输入包含多个测试实例,每个实例的第一行是一个整数n(n<100),表示一共有n种价值的资产,接着的n行每行包含两个整数pi和mi(0<pi,mi<10),分别表示某种价值和对应的数量,n为0的时候结束输入。
Output
对于每个测试实例,请输出分割资产的方案数%10000,如果不能分割,请输出“sorry”,每个实例的输出占一行。
Sample Input
2 1 1 2 1 0
Sample Output
1
代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define mem(a) memset(a,0,sizeof(a))
 4 const int MAXN=10010;
 5 int main(){
 6     int n,p[MAXN],m[MAXN],a[MAXN],b[MAXN];
 7     while(~scanf("%d",&n),n){
 8         int sum=0;
 9         mem(a);mem(b);
10         for(int i=1;i<=n;i++)
11             scanf("%d%d",&p[i],&m[i]),sum+=m[i]*p[i];
12         for(int i=0;i<=m[1];i++)
13             a[p[1]*i]=1,b[i]=0;//p[1]
14             if(sum%3!=0)puts("sorry");
15     else{
16         sum/=3;
17         for(int i=2;i<=n;i++){
18             for(int j=0;j<=sum;j++)
19                 for(int k=0,t=0;k<=sum&&t<=m[i];k+=p[i],t++)
20                     b[j+k]+=a[j];
21             for(int j=0;j<=sum;j++)
22                 a[j]=b[j]%10000,b[j]=0;
23         }
24     //    for(int i=0;i<=sum;i++)printf("%d ",a[i]);
25     //    puts("");
26         if(a[sum]==0)puts("sorry");
27         else printf("%d\n",a[sum]);
28         }
29     }
30     return 0;
31 }

题解:取走总资产的1/3;
该题的母函数为:
extern "C++"{
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int INF = 0x3f3f3f3f;
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef unsigned long long ULL;void SI(int &x){scanf("%d",&x);}
void SI(double &x){scanf("%lf",&x);}
void SI(LL &x){scanf("%lld",&x);}
void SI(char *x){scanf("%s",x);}}
const int MAXN = 10010;
int a[MAXN],b[MAXN];
int p[MAXN],m[MAXN];
int main(){int n;while(scanf("%d",&n),n){int sum = 0;for(int i = 0;i < n;i++)scanf("%d%d",&p[i],&m[i]),sum += p[i] * m[i];mem(a,0);mem(b,0);if(sum % 3 != 0){puts("sorry");continue;}for(int i = 0;i <= m[0];i++){a[p[0] * i] = 1;}for(int i = 1;i < n;i++){for(int j = 0;j <= sum ;j++){for(int k = 0;k <= m[i];k++){b[k * p[i] + j] += a[j];}}for(int j = 0;j <= sum;j++){a[j] = b[j] % 10000; b[j] = 0;}}if(a[sum/3] == 0)puts("sorry");else printf("%d\n",a[sum/3] % 10000);}return 0;
}

  

转载于:https://www.cnblogs.com/handsomecui/p/4823764.html

Crisis of HDU(母函数)相关推荐

  1. HDU2110 Crisis of HDU【母函数】

    Crisis of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. hdu2110(普通母函数)

    Crisis of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  3. linux vim无法编辑文件内容,Linux 使用vim命令编辑文件内容

    在终端可以使用vim命令来直接编辑文件内容. vim,也可以叫做vi. vim有三种模式:命令模式.输入模式.底线命令模式. 命令模式 vim  文件名   进入命令模式,vim也可以写成vi. 如果 ...

  4. 两条直线的交点 c语言,计算两条直线的交点(C#)

    PS:从其他地方看到的源码是有问题的.下面是修正后的 /// /// 计算两条直线的交点 /// /// L1的点1坐标 /// L1的点2坐标 /// L2的点1坐标 /// L2的点2坐标 /// ...

  5. [ACM] hdu 2082 找单词 (母函数)

    Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母 ...

  6. hdu 2065 指数型母函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2065 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被 ...

  7. 一道母函数的模板题 (hdu 2082)

    终于算弄明白母函数是什么东西了 = = , 呼~ 感觉它利用了高中学的二项式定理(就是用到组合数的那个) 完完全全的利用啊~~!以前用二项式求出最后那超长的x的表达式( 1 + C(n,1)*x^1 ...

  8. 母函数+例题(hdu 2079+hdu 2082)

    母函数+例题(hdu 2079+hdu 2082) 虽然ACM的确有点力不从心,但是还是贵在坚持,继续啃啃算法..... 昨天一个下午学了学母函数,离散数学+幂级数,只能说nb- 看了半天的原理,结果 ...

  9. HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包

    今天做这题才知道原来母函数的原型不是从第二个括号开始,那不过是优化而已,除了1^n,2^n那种类型可以从2开始外其他都要从1开始.好了,上代码吧. #include<stdio.h> in ...

  10. hdu 2065 红色病毒问题 (母函数)

    点击打开链接 指数型母函数问题 引例:假设有8个元素,其中a1重复3次, a2重复2次,a3重复3次.从中取r个组合,, 这样,对于一个多重集,其中a1重复n1次,a2 重复n2次,-,ak重复nk次 ...

最新文章

  1. 断言(assert)和程序的安全保证
  2. vue-cli的webpack模板项目配置文件分析
  3. python3列表_Python3列表
  4. 【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)
  5. linux db2 归档,DB2的归档模式设置方法
  6. 【好文链接】什么是开环控制?什么是闭环控制?区别在哪里?
  7. C# 通过一个控制台打开另一个控制台
  8. PHP函数func_get_args(),func_get_arg(),func_num_args()
  9. JS开发工具WebStorm使用快捷键
  10. 计算机键盘上的每一个按键应用,电脑键盘按键都代表着什么意思?
  11. 元数据是什么?如何管理元数据?
  12. [POI2009]Lyz
  13. vmware安装ubuntu Intel VT-x 处于禁用状态
  14. 探索不同的文件教案计算机,小学三年级信息技术教案范文
  15. 线条边框简笔画图片大全_每天学一幅简笔画生活小物简笔画图片大全!
  16. 2021湖北高考成绩查询时间咋查,2021年湖北高考成绩查询具体时间,几点钟可以查询...
  17. 远控软件gh0st源码免杀之我谈
  18. latency-nice优先级补丁源码分析
  19. Qt操作Excel表格
  20. android中 WIFI定位

热门文章

  1. ansys linux运行_如何在linux系统下启动workbench。谢谢啦。 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  2. python脚本实现ipv6的ddns功能
  3. java文件处理:文件流、上传、下载
  4. 让MySQL不区分大小写
  5. [zencart数据采集]第二课 火车头采集简单系统配置
  6. ***_ha_高可用_链路备份
  7. 十大经典排序算法与算法复杂度
  8. slam的回顾(一)
  9. MySQL中的锁机制-全局锁/表锁/行锁
  10. PostgreSQL与MySQL的区别收集