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 ...
随机推荐
- *Codeforces587E. Duff as a Queen
$n \leq 200000$的序列,支持以下$q \leq 4e4$个操作:区间异或$k$:查询区间能异或出多少不同的数.数字$0 \leq a_i \leq 1e9$. 大概是要区间线性基.区间修 ...
- luogu P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- the import org.springframewok.test cannot be resolved
在写Spring的单元测试时遇见了问题,注解@ContextConfiguration和SpringJUnit4ClassRunner.class无法导包.手动导包后错误为“the import or ...
- OllyDBG找到按钮的处理函数
最近系统有点慢,就想优化一下,于是下了个XX大师.结果要注册才行,看来可以用来练练手了.OD一下,靠还加了壳,偶就是用一下,就不脱你了.开始在弹出窗口MessageBoxA下断,伊,结果不是用的这个函 ...
- OC - 读歌词
类的头文件: #import <Foundation/Foundation.h> //FILE_PATH是文件名称. #define FILE_PATH @"/Users/qia ...
- cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法
cocos2d-x 3.0 中.假设你须要使用CocosStudio.Extensions扩展库 等等.都须要自己手动加入. 加入过程例如以下:(比方说如今我要加入libExtensions,libC ...
- C# Backgroundworker(后台线程)的使用
namespace BackgroundWorkderPauseSample { public partial class MainForm : Form { BackgroundWorker wor ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- C++中的链式操作
代码编译环境:Windows7 32bits+VS2012. 1.什么是链式操作 链式操作是利用运算符进行的连续运算(操作).它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作. ...
- China Vis 2015 会议小结
China Vis 2015 Paper有6个分会场.主要有 1.天气.气象.灾害可视化. 2.文本可视化应用: 3.树.网络.以及高维技术. 4.时空分析. 5.科学可视化与应用: 五个方面主题. ...