博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Harbinger vs Sciencepal
阅读量:7117 次
发布时间:2019-06-28

本文共 1449 字,大约阅读时间需要 4 分钟。

题意:给你n对人, 每一对都有2个人,每个人分别有一个值, 现在将每队人拆开塞入2组,要求分完这n对人之后,2个组的差值最小。

题解:将每队人的差值算出来,并且对于差值求和 tot, 然后这个题目就变成了给你n个数, 分成2组, 求差值最小的题目, 对差值进行跑背包操作就好了。

         这份代码用bitset完成的, 因为在练习这个东西。

代码:

1 #include
2 using namespace std; 3 #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); 4 #define LL long long 5 #define ULL unsigned LL 6 #define fi first 7 #define se second 8 #define pb push_back 9 #define lson l,m,rt<<110 #define rson m+1,r,rt<<1|111 #define max3(a,b,c) max(a,max(b,c))12 #define min3(a,b,c) min(a,min(b,c))13 typedef pair
pll;14 const int INF = 0x3f3f3f3f;15 const LL mod = 1e9+7;16 const int N = 200*250+10;17 bitset
b;18 int a[N];19 int main(){20 ///Fopen;21 int T;22 scanf("%d", &T);23 while(T--){24 b.reset();25 b[0] = 1;26 int n, v, u, tot = 0;27 scanf("%d", &n);28 for(int i = 1; i <= n; i++){29 scanf("%d%d", &u, &v);30 a[i] = abs(u-v);31 tot += a[i];32 }33 for(int i = 1; i <= n; i++){34 b |= (b << a[i]);35 }36 int l = 0;37 for(int i = tot/2; i >= 0; i--){38 if(b[i]){39 l = i;40 break;41 }42 }43 int ans = tot - 2*l;44 printf("%d\n", ans);45 }46 return 0;47 }
View Code

 

转载于:https://www.cnblogs.com/MingSD/p/8931693.html

你可能感兴趣的文章
常见自动化测试工具,你用过哪些?
查看>>
JdbcTemplate使用小结
查看>>
2014 网选 5011 Game(Nim游戏,数学题)
查看>>
微软官方windows phone开发视频教程第一天视频(附下载地址)
查看>>
螺旋阵列
查看>>
Gut基础入门(十)Git远程分支
查看>>
VC编写的程序不能在其他机器上运行的解决方案(续)
查看>>
不变模式-类行为型
查看>>
正则表达式学习笔记
查看>>
LVM2逻辑卷之1——创建及扩容
查看>>
grub.conf加密
查看>>
WSFC时间分区场景实作
查看>>
The Receiver 4.4 - 客户端硬件解码 - 大幅度提升3D显示效能
查看>>
解决 yum时 Error: Protected multilib versions报错
查看>>
前端基础---HTML
查看>>
线程池
查看>>
理解RESTful架构
查看>>
windows_learn 002 用户管理和组策略
查看>>
linux中的邮件服务器笔记
查看>>
linux命令:w、who、whoami、last、lastb、lastlog、basename、mail、hostname
查看>>