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 ...
随机推荐
- POJ1861 Network
Time Limit: 1000MS Memory Limit: 30000KB 64bit IO Format: %lld & %llu Description Andrew is ...
- Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- Unity3D 对象池思想 在游戏开发中的运用
分类:U3D 1.在王者荣耀中,每30秒小兵会出现一波,出现之后会被敌方玩家或敌方小兵销毁,一局游戏下来,小兵会被创建多次,同时也会被销毁,在游戏中,这种频繁的创建和销毁游戏对象是很损耗性能的.在游戏 ...
- openssl搭建双向认证https
http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/ http://blog.163.com/fangjinbao ...
- LCD1602和LCD12864
1602 字符型(字符型的模组) 只能显示数字与字符,不可以显示汉字 12864 点阵型(图形型的模组) 可根据需求任意显示字符 数字 汉字 图形 1602 为16字乘2行12864 为128列点阵乘 ...
- luogu P3420 [POI2005]SKA-Piggy Banks
题目描述 Byteazar the Dragon has NN piggy banks. Each piggy bank can either be opened with its correspon ...
- UICollectionView 讲解
什么是UICollectionView UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是 UICollectionView的最 ...
- 临远的spring security教程
为啥选择Spring Security 欢迎阅读咱们写的Spring Security教程,咱们既不想写一个简单的入门教程,也不想翻译已有的国外教程.咱们这个教程就是建立在咱们自己做的OA的基础上,一 ...
- Matlab多项式拟合測试
x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度 ...
- error LNK2019 无法解析的外部符号------类模板和内敛函数
今天用类模型实现一个单链表,开始是.h和.cpp将类模板的声明与实现分开写的,结果总是报错: 错误 error LNK2019: 无法解析的外部符号 ?$SingleList@H@@QAE@XZ),该 ...