第一题:
题目大意:
梦幻城市每年为全市高中生兴办一次运动会。为促使各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数皆相同。为增加比赛的竞争性,希望分成越多队越好。你的任务是由各校的人数决定最多可以分成的队数。
解题过程:
1.直接求所有数的最大公约数即可。
初始得分100.
第二题:
题目大意:
给出一个式子火柴棍组成的A+B=C。(A,B,C<=999),求移动最少的火柴使得等式成立。不允许改变位数以及符号,不要制造0开头的数。
解题过程:
1.一开始想到用dfs什么的直接暴搜,但是写起来各种麻烦。。而且可能还很慢。
2.考虑到数的范围<=999,那么就枚举目标状态的A和B,1000*1000的复杂度,然后计算初始状态到目标状态的最少步数。。
3.计算最少步数的过程:先打个表,move[i][j]表示数字i到数字j需要移动多少根火柴使得i是j的一部分,或者j是i的一部分。
比如 0到6,需要把0的一根火柴移到最中间,所以move[0][6]=1. 1 到 7,1本身就是7的一部分,所以move[1][7]=0;
然后用hash[i][j] 表示 i 变成 j 需要添加 多少根火柴。 比如 4需要4根火柴,8需要7根,所以
hash[4][8]=3;
hash[8][4]=-3; (负数表示需要拿掉火柴)
4.然后把初始状态和目标状态逐位 比较 计算距离 , 比如 12 到 23 ,1变成2 需要添加3根火柴,2到3需要移动1根火柴。
用tmp1表示一共需要添加多少根火柴,tmp2表示一共需要移走多少根火柴(就是所有负数的绝对值的和),tmp3表示需要移动多少根火柴。 首先必须满足tmp1= tmp2,也就是目标状态和初始状态用的火柴一样多。。然后更新ans。
ans=min(ans,tmp1+tmp3);
有点贪心的思想。 初始得分100。
第三题:
题目描述:
长郡中学校长打算举行建校100周年的晚会。学校的职员是分等级的,也就是说职员之间的上下级关系组成一棵以校长为树根的树。校长要亲自邀请一些职员参见晚会。同时校长亲自到场欢庆这个节日。职员用1~n之间的整数编号,人事处给出了每个职员的搞笑指数。如果一个人和他上司一起参加,那么便可能产生麻烦。为了使晚会的每个参加者都高兴,校长不会同时邀请某个职员和他的顶头上司。
你的任务是给出一个客人列表,使得客人的搞笑指数之和最大。
解题过程:
1.裸的树形dp。但是 题目说的不是很清楚,题目的本意 貌似是 校长在1~n里,且校长必须选。。
2.一开始把校长不考虑在n个人中,然后虚拟了一个节点(校长),结果就WA 5个点了。 初始得分50.