优化设计(opt)
Description
生活中总有些事情不能两全,所谓“鱼和熊掌”说的便是这个意思。小N在最近一个设计中正面临着这样的问题而头痛不已:出于居住环境的考虑,楼间距离应该较大,而为了节约土地资源却应减小楼间距离;朝南的房间应该选择起居室还是卧室;等等……。
为了最优化设计方案,小N决定将问题进行建模,将参数的选择抽象为布尔变量,将各种要求抽象为布尔表达式。目标即为选择参数的设置使得被满足的要求尽量多,对应的,在模型中选择布尔变量的一个赋值使得被满足的布尔表达式尽量多。现在请你帮助小X设置方案中的参数,使得设计方案尽可能优化。
下面将形式化地描述小X的模型。模型包含n 个布尔变量x1, x2, …, xn 和m个布尔表达式E1, E2, …, Em。布尔变量的一个赋值为从{x1, x2, …, xn}到{True,False}的一个映射。一个布尔表达式E 被满足指该表达式值为真(True).
布尔表达式包含与(&)、或( | )、非( ~ )三种类型运算,可归纳定义如下:
基础:
1) 单个布尔变量 xi 组成一个布尔表达式E。E 被满足当且仅当xi 取值为真。
归纳:
1) 若E是合法布尔表达式,则E’=(E)也是布尔表达式。E’被满足且仅当E被满足。
2) 若E是合法布尔表达式,则E’= ~E 也是布尔表达式。E’被满足当且仅当E 不被满足(即取值为假)。
3)若 E1、E2 是合法布尔表达式,则E’=E1&E2 也是布尔表达式。E’被满足当且仅当E1、E2 均被满足。
4) 若 E1、E2 是合法布尔表达式,则E’=E1|E2 也是布尔表达式。E’被满足当且仅当E1 被满足或E2 被满足。
所有合法布尔表达式均由以上规则产生。一些合法布尔表达式的例子为:x1&~x2,(x1&~x2)|x3。布尔表达式的运算符优先级由高到低分别为非、与、或。举例说明,表达式x1&~x2|~x3 等价于(x1&(~x2))|(~x3),即非运算优先计算,与次之。
在本题中,目标即为找到一组赋值,使得给定的m个布尔表达式中被满足的表达式尽可能多。
Input
这是一道提交答案型试题,所有的输入文件opt*.in 都已在目录下。
对于每个输入文件,文件第一行包含一个整数n,表示布尔变量的个数。第二行为一个整数m,为布尔表达式的个数。接下来m 行,每行为一个布尔表达式,表达式格式同上述定义,并请参看输入文件(表达式中不含空格)。
Output
对于每一个输入文件,你需要在对应目录下给出对应的输出文件(主文件名不变,扩展名为.out)。
输出文件包含n 行,每行为0或1。第i行表示对第i个布尔变量的赋值(1表示赋值为True, 0 表示赋值为False)。
Sample Input
3
2
x1&x2&x3
~x1|x2
Sample Output
1
1
1
Hint
【数据规模和约定】
每个测试点单独评分。
对于每一个测试点,如果你给出的输出文件不合法,如文件格式错误、输出解不符合要求等,该测试点得0分。
否则设你输出的赋值能够使得k个表达式被满足,对于不同的测试点,我们还设有10个评分相关的常数c1 ≤c2 ≤ c3 ≤ c4 ≤ c5 ≤ c6 ≤ c7 ≤ c8 ≤ c9 ≤ c10,你在该测试点中的得分取决于下列约定:
如果k < c1,得0 分。
如果k ≥ c1,得1 分。
如果k ≥ c2,得2 分。
如果k ≥ c3,得3 分。
如果k ≥ c4,得4 分。
如果k ≥ c5,得5 分。
如果k ≥ c6,得6 分。
如果k ≥ c7,得7 分。
如果k ≥ c8,得8 分。
如果k ≥ c9,得9 分。
如果k ≥ c10,得10 分。
如果满足多个条件,取得分最大者为最终得分。
解答:
第1-2个点 n很小,2^n暴力
========================================
第3-10点,贪心+退火(随机化调整)+暴搜(搜了我1h)