hdu 1171 Big Event in HDU
2015-08-07 23:59
363 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1171
解题思路:
由母函数可知,数组c1[i]代表i一共有多少种组合,所以c1[i]为0,代表该数没有可行解,从总数的一半开始,往下面找,直到找到一个不为0的i,即为所求。。。
AC代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1171
解题思路:
由母函数可知,数组c1[i]代表i一共有多少种组合,所以c1[i]为0,代表该数没有可行解,从总数的一半开始,往下面找,直到找到一个不为0的i,即为所求。。。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstring> using namespace std; int c1[100000],c2[100000]; int a[55],num[55]; int main(){ int n; while(scanf("%d",&n),n > 0){ //然而这里并不能写成n != -1... int sum = 0; int i,j,k; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i = 0; i < n; i++){ scanf("%d%d",&a[i],&num[i]); sum += a[i]*num[i]; } int mid = sum/2; for(i = 0; i <= num[0]; i++) c1[i*a[0]] = a[0]; for(i = 1; i < n; i++){ for(j = 0; j <= mid; j++) for(k = 0; k <= num[i] && k*a[i]+j <= mid;k++) c2[k*a[i]+j] += c1[j]; for(j = 0; j <= mid; j++){ c1[j] = c2[j]; c2[j] = 0; } } for(i = mid; i >= 0; i--) if(c1[i]) break; printf("%d %d\n",sum-i,i); } return 0; }
相关文章推荐
- 学习方法的思考
- 删除数据库日志
- Leetcode46 Permutations
- 使用VMM服务器构建 Hyper-V主机(4)
- 八条千金不卖的人生感悟
- 【JAVA】接口(一)
- tarjan算法之 强连通分量
- 使用VMM服务器构建 Hyper-V 主机(3)
- USB组合设备 Interface Association Descriptor (IAD)
- 生成器 种子
- 使用VMM服务器构建 Hyper-V主机(2)
- Codeforces Round #312 (Div. 2) B. Amr and The Large Array
- UVA 1218 (树形DP)
- 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
- 使用VMM服务器构建Hyper-V主机(1)
- MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost'
- poj2752
- 六间房 繁星 酷我 来疯 秀吧 新浪秀 直播播放器 Live 1.2
- const、volatile、mutable的用法
- HDU 2768 Cat vs. Dog 最大独立集+匈牙利算法(提高题)