题目链接:
题意:平面上有n个点,一次可以擦掉一条直线上的所有点。问至少擦多少次才能将所有点擦完?
思路:b[i][j]表示经过第i、j个点的直线经过的所有点的集合。然后记忆化搜索即可。。。一开始我用b数组(一开始用的是一维数组)
View Code
1 #include2 #include 3 #include 4 #define min(x,y) ((x)<(y)?(x):(y)) 5 using namespace std; 6 7 struct Node 8 { 9 int x,y;10 };11 12 const int INF=1000000000;13 Node a[20];14 int n,f[(1<<16)+5],b[20][20],p[(1<<16)+5];15 int C,num=0;16 17 void deal()18 {19 int i,j;20 for(i=0;i<(1<<16);i++)21 {22 p[i]=0;23 for(j=0;j<16;j++) if(i&(1<