优化设计(暴搜+退火+Rp)

优化设计(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)







你可能感兴趣的:(优化设计(暴搜+退火+Rp))