题意:

  分家问题,对每种家具都估个值,给出同样价值的家具有多少个,要求尽可能平分,打印的第一个数要大于等于第二个数。

思路:

  可以用背包做,也可以用母函数。母函数的实现只需要注意一个点,就是每次以一种价格递增,而不是自加。每类家具有上限,就是该类家具的价值*件数。注意判断输入的结束标志是n<0。

 #include <bits/stdc++.h>
using namespace std;
const int N=;
int tmp[**/], ans[**/], big; //上限是50*50*100,但一半就够了
int v[], m[]; int cal(int n) //返回第二个学院所得资产
{
memset(ans,,sizeof(ans));
int half=(big>>);//求一半以下就行,多了也没用
for(int i=,t=; i<=half&&t<=m[]; t++,i+=v[] ) ans[i]=;
for(int i=; i<n; i++)
{
memset(tmp,,sizeof(int)*(half+));
for(int k=; k<=half; k++)
for(int j=,t=; t<=m[i]&&j+k<=half; t++,j+=v[i] )
tmp[j+k]+=ans[k];
memcpy(ans,tmp,sizeof(int)*(half+));
}
for(int i=half; i>; i--)
if(ans[i]) return i;
return ;
} int main()
{
//freopen("input.txt", "r", stdin);
int n, a, b;
while(scanf("%d",&n), n>)//这个判断结束要注意
{
big=;
for(int i=; i<n; i++)
{
scanf("%d%d",&v[i],&m[i]);
big+=v[i]*m[i];
}
int tmp=cal(n);
printf("%d %d\n",big-tmp,tmp);
}
return ;
}

AC代码

最新文章

  1. 机器学习技法-GBDT算法
  2. CentOS 6 下RPM方式安装MySQL5.6
  3. 【bzoj1011】[HNOI2008]遥远的行星
  4. zoj 1967 Fiber Network/poj 2570
  5. c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
  6. 用ISE14.7引用功能强大的UltraEdit编写Verilog
  7. 属性动画(Property Animation)资源
  8. Android利用网络编程HttpClient批量上传(两)AsyncTask+HttpClient监测进展情况,并上传
  9. 剖析touch事件在View中的传递
  10. 当使用composer安装组件时提示错误
  11. QT的radioButton组的使用
  12. DSAPI 调用串口选择界面
  13. w3m 使用总结
  14. echarts 去掉 x轴坐标
  15. NoSql图形数据库
  16. RestExpress response中addHeader 导致stackOverflow
  17. SpringMVC异常处理器
  18. SpringBoot Laravel(artisan serve) MIXPHP简单性能测试
  19. vue pros 子组件接收父组件传递的值
  20. Oracle Telnet 1521 失败

热门文章

  1. 了解Hadoop
  2. HUD-1548
  3. 极客时间_Vue开发实战_05.Vue组件的核心概念(1):属性
  4. Laravel框架之Request操作
  5. 梦工厂实验室 蛇形填数 dfs
  6. 使用ant时 出现 java.lang.OutOfMemoryErro r: Java heap space的解决办法
  7. 快速打开和关闭SQL服务
  8. JavaScript代码风格和分号使用问题
  9. HDU4166【BFS】
  10. Codevs 1247 排排站