众所周知,太吾绘卷是非常爱(niu)你(bi)的国产武侠游戏,里面有一个继承系统,当你死后可以在你的子孙中挑选一个继承人,用他的人物继续进行游戏。当你挑选继承人的时候一定会挑选能力最强,天赋最高的那一个来继承。这样你培养的时候也会重点培养天赋最高的那一个。某zf大侠有两个继承人,第一个天赋很高,第二个天赋比较平庸,zf大侠想重点培养第一个继承人,但是又怕第二继承人觉得不公平,所以他会在尽量公平的基础上来重点培养第一个继承人。Zf大侠有n种秘籍,每种秘籍都能提升某个人一定的能力,请你帮zf大侠决定怎么培养继承人吧。Input本题有多组输入,每组数据第一行输入由整数N(0 < N <= 50)组成,表示秘籍的种类。接下来N行,每行两个整数V(0 当N为负数时程序结束。Output每组数据输出一行,包含两个数字A和B,分别带表两个继承人最终获得的能力大小(一开始两个继承人的能力都为0),A和B用空格分开。Sample Input

2
10 1
20 1
3
10 1
20 2
30 1
-1

Sample Output

20 10
40 40 解析:dp[sum/2]是其全部的一半(能取到的话)或者为其最小的那一分
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+;
int dp[];
int a[];
int main()
{
int n;
while(~scanf("%d",&n)&&n>=){
memset(a,,sizeof(a));
memset(dp,,sizeof(dp));
int x,y,sum=;
int cnt=;
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);
sum+=x*y;
int t=;
while(y>=t){
a[cnt]=x*t;
cnt++;
y-=t;
t*=;
}
if(y>){
a[cnt]=x*y;
}
}
int v=sum/;
for(int i=;i<=cnt;i++){
for(int j=v;j>=a[i];j--){
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
}
printf("%d %d\n",sum-dp[v],dp[v]);
}
return ;
}

最新文章

  1. 夺命雷公狗----Git---6---GitHub基本使用
  2. GeoHash原理解析
  3. cocos2d-x之猜数字游戏
  4. ubuntu打不开图形界面,显示run in low_graphic mode
  5. ps aux 查看进程信息
  6. PHP中的include、include_once、require、require_once
  7. C#学习笔记一:C#开发环境的设置
  8. 帝国cms7.0修改默认搜索模版中的分页[!--show.page--]
  9. UltraChart导出图片
  10. 用overflow-y 解决web页面抖动问题
  11. 【ThinkingInC++】52、函数内部的静态变量
  12. TCP札记
  13. 暑假集训D11总结
  14. 网络操作基础(one)
  15. thinkphp5 model 模型
  16. spring-boot(三) HowTo
  17. Python2.7-re模块
  18. HDFS-异常大全-《每日五分钟搞定大数据》
  19. Windows 下安装NPM
  20. React Native之网页组件WebView的使用与通信

热门文章

  1. K3老单序时簿开发示例
  2. java基础异常处理
  3. 使用BeautifulSoup爬取汽车之家新闻
  4. SpringCloud Netflix Feign
  5. util之Stack
  6. Asp.net的WebForm的落后技术
  7. 1.4 面试问题整理: ATM机取款
  8. 常见css属性
  9. [lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充
  10. AJAX--XMLHttpRequest对象