ZOJ 3706 Break Standard Weight 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5009
题目意思:给出两个mass:x 和 y,问如何将其中一个 mass 一分为二(当然分完之后它们的和要等于原来的mass,或x 或 y),使得利用这三个mass 可称的数量最大。输出这个最大数量。
网上参考别人用STL中的set来写,太厉害了!!!考虑到set对于重复的元素只存储一个,那么当三个mass组合的过程中有重复的,它都会自动舍弃有重复的,不需要用if来判断!另外,也有可能其中两个mass是相等的,这时如果各放一边,就只会称到0,即不能称到任何物体!所以预先把0插入,这就是代码中为什么最后要返回 st.size()-1 的原因!!
方法一:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <set>
- using namespace std;
- set<int> st;
- int cal(int a, int b, int c)
- {
- st.clear(); // 每一次都要清空集合里的元素
- st.insert(); // 考虑到左右两边各有一个相同mass的情况,这时称不了物体!
- st.insert(a); // 只选一个mass称物体
- st.insert(b);
- st.insert(c);
- st.insert(a+b); // 只选两个mass称另外一边的物体
- st.insert(abs(a-b));
- st.insert(b+c);
- st.insert(abs(b-c));
- st.insert(a+c);
- st.insert(abs(a-c));
- st.insert(abs(a+b-c)); // 两个mass在一边,另一边放第三个mass和代称物
- st.insert(abs(a+c-b));
- st.insert(abs(b+c-a));
- st.insert(a+b+c); // 三个mass在一边,另一边称物体
- return st.size()-;
- }
- int main()
- {
- int T, x, y, sum;
- while (scanf("%d", &T) != EOF)
- {
- while (T--)
- {
- sum = ;
- scanf("%d%d", &x, &y);
- for (int i = ; i <= x; i++)
- {
- int t1 = i;
- int t2 = x-i;
- int t3 = y;
- sum = max(sum, cal(t1, t2, t3));
- }
- for (int i = ; i <= y; i++)
- {
- int t1 = i;
- int t2 = y-i;
- int t3 = x;
- sum = max(sum, cal(t1, t2, t3));
- }
- printf("%d\n", sum);
- }
- }
- return ;
- }
方法二:用到dfs
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- int cnt, num[];
- int vis[];
- void dfs(int count, int now)
- {
- if (!vis[now] && now > )
- {
- vis[now] = ;
- cnt++;
- }
- if (count == )
- return;
- dfs(count+, now+num[count]);
- dfs(count+, now-num[count]);
- dfs(count+, now);
- }
- int main()
- {
- int T, x, y, sum;
- while (scanf("%d", &T) != EOF)
- {
- while (T--)
- {
- sum = ;
- scanf("%d%d", &x, &y);
- for (int i = ; i <= x; i++)
- {
- cnt = ;
- memset(vis, , sizeof(vis));
- num[] = i;
- num[] = x-i;
- num[] = y;
- dfs(, );
- sum = max(sum, cnt);
- }
- for (int i = ; i <= y; i++)
- {
- cnt = ;
- memset(vis, , sizeof(vis));
- num[] = i;
- num[] = y-i;
- num[] = x;
- dfs(, );
- sum = max(sum, cnt);
- }
- printf("%d\n", sum);
- }
- }
- return ;
- }
ZOJ 3706 Break Standard Weight 解题报告的更多相关文章
- zoj 3706 Break Standard Weight(dp)
Break Standard Weight Time Limit: 2 Seconds Memory Limit: 65536 ...
- [ACM_水题] ZOJ 3706 [Break Standard Weight 砝码拆分,可称质量种类,暴力]
The balance was the first mass measuring instrument invented. In its traditional form, it consists o ...
- zoj 3706 Break Standard Weight
/*题意:将两个砝码中的其中一个分成两块,三块组合最多有几种情况(可以只有一块,或者两块). 组合情况 i j m 三块砝码 (i+j)-m=m-(i+j) i+j i-j=j-i i j m (i ...
- [ZOJ 3076] Break Standard Weight
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5009 题意:给你两个数字,可以把其中一个拆成两个数字,计算这三个数字 ...
- Break Standard Weight (ZOJ 3706)
Problem The balance was the first mass measuring instrument invented. In its traditional form, it co ...
- zoj 2313 Chinese Girls' Amusement 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1313 题目意思:有 N 个人(编号依次为1~N)围成一个圆圈,要求求 ...
- 【LeetCode】1046. Last Stone Weight 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 大根堆 日期 题目地址:https://leetco ...
- 【LeetCode】528. Random Pick with Weight 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/random-pi ...
- zoj 1109 Language of FatMouse 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=109 题目意思:给出一个mouse-english词典,问对于输入的m ...
随机推荐
- OI 数论整理
1.素数: 质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数. 2016 ...
- ftrace 提供的工具函数
内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...
- mongo安装-docker
拉取官方镜像(可以自己使用dockerFile构建): docker search mongo //查询Docker Hub 上的mongo镜像 docker pull mongo // 拉取官方镜像 ...
- itext A4纸张横向创建PDF
import java.awt.Color;import java.io.FileOutputStream;import java.io.IOException; import com.lowagie ...
- (10) android控件-date
1.TimePicker <TimePicker android:id="@+id/timePicker4" android:layout_width="wrap_ ...
- Netty构建游戏服务器(二)--Hello World
一,准备工作 1,netty-all-4.1.5.Final.jar(官网下载) 2,eclipse 二,步骤概要 1,服务器开发 (1),创建Server类 该类是程序的主入口,有main方法,服务 ...
- 《从零开始搭建游戏服务器》MySQL安装配置
一.下载资源: 到MySQL官网下载免安装版的mysql包,或者直接点击此链接下载:mysql-5.7.19-winx64.zip 二.解压配置: 将上面下载的安装包解压到一个本地目录下,在得到的my ...
- ETCD 单机安装
由于测试的需要,有时需要搭建一个单机版的etcd 环境,为了方便以后搭建查看,现在对单机部署进行记录. 一.部署单机etcd 下载 指定版本的etcd下载地址 ftp://ftp.pbone.net/ ...
- python解析网页中js动态添加的内容
https://www.cnblogs.com/asmblog/archive/2013/05/07/3063809.html https://www.zhihu.com/question/21471 ...
- OD调试器调试Delphi程序按钮事件断点方法
这几天我调试一个Delphi程序,总是无法断点按钮事件,像我这样的菜鸟断点按钮事件真心累啊.所以我分享一下我下断点的经验!希望新手们少走弯路!! 工具/原料 OD调试器 Delphi程序 方法 ...