NKOJ3751 扫雷游戏

问题描述

有一款有趣的手机游戏。棋盘上有n颗地雷,玩家需要至少扫掉其中的k颗雷。
每一步,玩家可以用手指在手机屏幕上划一条直线,该直线经过的地雷都会被扫除掉。
问,最少需要划几次就能扫除k颗以上的地雷?

输入格式

有两组测试数据,对于每组数据:
第一行,一个整数n,表示地雷的总数
第二含,一个整数k,表示至少需要扫掉的雷数
接下来n行,每行两个整数x和y,表示一颗地雷的坐标。

输出格式

两行,每行一个整数,表示对应数据的答案

样例输入


4
1 1
1 2
2 1
2 2

7
1 1
2 2
1 3
3 1
3 3
4 1
4 2
4 3
4 5

样例输出

2
2

提示

对于30%的数据, 1<=n<=8 ,  1<=k<=n , -10000<=x,y<=10000
对于100%的数据,1<=n<=16 , 1<=k<=n , -10000<=x,y<=10000

【题目分析】
观察题目,n最大为16,两点确定一条直线,最多可画出162条直线。
我们暴力枚举所有直线,统计出每条直线穿过的点数。
每条直线最多穿过16个点,我们用二进制来实现状态压缩。
我们把n个点编号0到n - 1,用Line[i][j]记录编号i和j的点对应直线穿过的节点集合。
 
 用结构体存下每一个点的坐标, 
for(
叉乘−
背包DP
【传送门】http://oi.nks.edu.cn/zh/Problem/Details?id=3751
posted @ 2019-06-20 18:21  骆孑不掉线  阅读(122)  评论(0编辑  收藏  举报