题目\(1\)

Description

  一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,且两个组内的所有人体重加起来尽可能地接近.

Input

  第\(1\)行是一个\(n\),表示参加拔河比赛的总人数,\(n<=100\),接下来的n行表示第\(1\)到第\(n\)个人的体重,每个人的体重都是整数\((1<=weight<=450)\)。

Output

  包含两个整数:分别是两个组的所有人的体重和,用一个空格隔开。注意如果这两个数不相等,则请把小的放在前面输出。

Sample Input 1

3
100 90 200

Sample Output 1

190 200

Hint

\(n<=100,1<=weight<=450\)

模型

\(0-1\)背包

解法

转换成成一个花费\(=\)价值的\(0-1\)背包问题,记\(F[i][j]\)为用前\(i\)个物品,总代价\(<=j\)能取得的最大价值,可得状态转移方程:
\[F[i][j]=max(F[i][j],F[i][j]-w[i]]+w[i])\]
最后答案即为\(F[N][Sum/2]\),其中\(Sum=\sum_{i=1}^Nw[i]\).

实际代码中,还可以使用滚动数组来优化空间.

代码

#include<bits/stdc++.h>
using namespace std;#define MaxN 105
#define Maxw 45005
int w[MaxN],N;
int F[Maxw];
int Tx=0;int main()
{cin>>N;for(int i=1;i<=N;i++){cin>>w[i];Tx+=w[i];}for(int i=1;i<=N;i++)for(int P=Tx;P;P--)if(P-w[i]>=0)F[P]=max(F[P],F[P-w[i]]+w[i]);cout<<F[Tx/2]<<" "<<Tx-F[Tx/2]<<endl;return 0;
}

题目\(2\)

Description

  一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,两个队伍的人数之差不能超过1,且两个组内的所有人体重加起来尽可能地接近.

Input

  第\(1\)行是一个\(n\),表示参加拔河比赛的总人数,\(n<=100\),接下来的n行表示第\(1\)到第\(n\)个人的体重,每个人的体重都是整数\((1<=weight<=450)\)。

Output

  包含两个整数:分别是两个组的所有人的体重和,用一个空格隔开。注意如果这两个数不相等,则请把小的放在前面输出。

Sample Input 1

3
100 90 200

Sample Output 1

190 200

Hint

\(n<=100,1<=weight<=450\)

模型

\(0-1\)背包

解法

同样转换成成一个花费\(=\)价值的\(0-1\)背包问题,记\(F[i][j][k]\)为在前\(i\)个物品中选择\(k\)个,总代价\(<=j\)能取得的最大价值.可得状态转移方程:
\[F[i][j][k]=max(F[i][j][k],F[i-1][j-1][k-w[i]]+w[i])\]
最终答案即为\(F[N][N/2][Sum]\),其中\(Sum=\sum_{i=1}^Nw[i]\).

同样可以采用滚动数组优化,还要注意初始化边界.

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f
#define MaxN 105
#define Maxw 45005
int w[MaxN],N;
int F[MaxN][Maxw];
int Tx=0;int main()
{cin>>N;for(int i=1;i<=N;i++){cin>>w[i];Tx+=w[i];}memset(F,-INF,sizeof(F));for(int i=0;i<=Tx>>1;i++)F[0][i]=0;for(int i=1;i<=N;i++)for(int j=i;j>=1;j--)for(int P=Tx>>1;P>=w[i];P--)F[j][P]=max(F[j][P],F[j-1][P-w[i]]+w[i]);int Ans=F[N>>1][Tx>>1];if(N%2)Ans=max(Ans,F[(N>>1)+1][Tx>>1]);        cout<<Ans<<" "<<Tx-Ans<<endl;return 0;
}

还要注意,本题中第三重循环必须从\(Sum/2\)开始,即代码中的

for(int P=Tx>>1;P>=w[i];P--)

否则会超时.

转载于:https://www.cnblogs.com/TaylorSwift13/p/11172401.html

CQYZOJ P1392 拔河问题相关推荐

  1. 计算机学院 拔河比赛加油词,运动会拔河比赛加油词

    运动会拔河比赛加油词 拔河为双方各执绳一端进行角力的体育活动,属于中国的传统运动项目. 那么运动会拔河比赛加油词有哪些呢?下面是小编为大家带来的运动会拔河比赛加油词! 运动会拔河比赛加油词[1] 集体 ...

  2. 拔河原理html,大班活动拔河活动教案

    大班活动拔河活动教案 教案中对每个课题或每个课时的教学内容,看看下面的大班活动拔河活动教案吧,欢迎借鉴. 大班活动拔河活动教案 活动目标: 1.理解儿歌,掌握儿歌中的拉.摇.咬.叫等动词. 2.感受儿 ...

  3. 【dfs】拔河比赛(ybtoj dfs-1-1)

    拔河比赛 ybtoj dfs-1-1 题目大意 给你n个数,让你分成两堆,使其数量相差不大于1,问数值相差最小是多少 输入样例 1 3 55 50 100 输出样例 5 数据范围 1⩽T⩽501\le ...

  4. 【动态规划】拔河比赛 (ssl 1638)

    拔河比赛拔河比赛拔河比赛 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接 ...

  5. 我们在进行着一场拔河比赛……

    大家好,我是雄雄,欢迎关注公众号[雄雄的小课堂]. 不知不觉,3班已经面临就业了. 似乎每个班级到三期的最后阶段,出现的问题都那么类似,那就是一部分同学已经"放弃努力"了,大家貌似 ...

  6. matlab拔河比赛_拔河比赛

    matlab拔河比赛 Description: 描述: This is a standard interview problem to divide a set of number to two di ...

  7. 计算机学院 拔河比赛加油词,校园拔河比赛加油稿

    在运动会上,拔河是一项能体现集体精神的比赛.下面是出国留学网小编为您整理的"校园运动会加油稿拔河",仅供参考,希望您喜欢!更多详细内容请点击出国留学网查看. 校园运动会加油稿拔河 ...

  8. 寂静岭:理性与心魔的拔河

    寂静岭长子 姓名:Silent Hill 出生时间:1999年1月 "Silent Hill(寂静岭)"是Konami公司在PS主机上发售了一款恐怖冒险游戏.在这款游戏中,Kona ...

  9. 【C4】【搜索】拔河比赛

    题目描述 在未来号办公室,老师们平时集训脑力劳动力比较重.为了劳逸结合,我们敬爱的梁老师准备了一场拔河比赛,让老师们放松心情. 为了拔河比赛的公正性,梁老师提出以下要求: 1. 拔河比赛两边人数最多不 ...

最新文章

  1. 食出100分:‘粥’的做法4---鱼片瘦肉粥
  2. linux 进程 ctrl-c,ctrl-z,ctrl-d
  3. spark学习:ContextCleaner清理器
  4. 安全终止MFC线程全
  5. SSM+Netty项目结合思路
  6. sklearn决策树概述
  7. 一道面试题目引发的思考
  8. 灵魂一问-如何彻底防止APK反编译?成功定级腾讯T3-2
  9. 重定位----操作系统做的事情
  10. .NET 靠开源再“出圈”!
  11. android之uniapp自定义基座
  12. 电脑只有一个c盘怎么办_新买的电脑,拿到手只有一个C盘,如何分成两个盘
  13. C++简介(5)STL
  14. unity使用html播放器,Unity Web Player and browser communication Unity网络播放器和浏览器通信...
  15. bootdo框架切换tab标签时自动刷新,无需手动刷新
  16. 渗透测试-SQL注入检测
  17. 微信小程序短信倒计时60s功能
  18. Latex: 表格内换行
  19. w7系统计算机更改用户名,win7系统用户名不能修改的解决方法
  20. 爬取https://sc.chinaz.com/tupian/的图片

热门文章

  1. 千千万万的IT开发工程师路在何方?
  2. windows下buildbot 的搭建及config文件讲解
  3. 全局变量和局部变量命名规则_变量范围和LEGB规则
  4. 数学建模算法:支持向量机_从零开始的算法:支持向量机
  5. mongdb 群集_通过对比群集分配进行视觉特征的无监督学习
  6. 征信报告上的逾期记录应该怎么清除?
  7. 《北京作家》2010年第2期,总第4期出版
  8. 使用函数实现数据大小端转换
  9. 用移位实现除以或者乘以一个数
  10. Digimeter 软件