博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ1018 Brush (IV)(状压DP)
阅读量:4686 次
发布时间:2019-06-09

本文共 1013 字,大约阅读时间需要 3 分钟。

题目大概说一个平面有n个灰尘,可以用一把刷子直直刷过去清理直线上的所有灰尘,问最少要刷几下才能清理完所有灰尘。

  • 首先怎么刷其实是可以确定的,或者说直线有哪些是可以确定的,而最多就有C(n,2)条不一样的直线,即16*15/2=120;
  • 然后容易想到用状压DP求解,d[S]表示已经清理的灰尘的状态是S最少刷的次数;
  • 而转移就是通过枚举接下来使用那条直线,用我为人人的方式转移,
  • 另外直线包含的灰尘集合状态一开始就可以预处理出来,这样时间复杂度O(2n*n2)。

不过超时,超了800多ms。实在想不出怎么没办法。而看了网上,也是一样思路,不过转移是任意选出一个没有在S中的点,然后枚举另一个没有在S的端点,通过添加这两点构成的直线去转移,时间复杂度O(2n*n)。

我表示不解。。这样有些状态会漏吧???

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int d[1<<16],sta[16][16]; 7 int main(){ 8 int t,n,x[16],y[16]; 9 scanf("%d",&t);10 for(int cse=1; cse<=t; ++cse){11 scanf("%d",&n);12 for(int i=0; i
10000) continue;38 int j=0;39 while(j
>j&1)==0) break;41 ++j;42 }43 for(int k=0; k
>k&1)==0){45 d[i|sta[j][k]]=min(d[i|sta[j][k]],d[i]+1);46 }47 }48 }49 printf("Case %d: %d\n",cse,d[(1<

 

转载于:https://www.cnblogs.com/WABoss/p/5657764.html

你可能感兴趣的文章
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同!
查看>>
导入properties时的坑
查看>>
python——网络编程
查看>>
Spark的39个机器学习库
查看>>
Electron学习笔记(一)
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
查看>>
配置NRPE的通讯
查看>>
VS2005编译VTK5.10.1
查看>>
shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
查看>>
总结上海永辉云商高级前端职位面试题集
查看>>
中国计算机学会推荐国际学术会议和期刊目录
查看>>
文本元素
查看>>
各种可以远程
查看>>
对服务器的认识
查看>>
分治法实现1-N的数字按字典序全排列组合 Java语言
查看>>
序列化 与 反序列化
查看>>
购物车
查看>>
python基础(一)
查看>>
UI设计篇·入门篇·绘制简单自定义矩形图/设置按钮按下弹起颜色变化/设置图形旋转...
查看>>
linux 使用NSF 映射远程磁盘目录
查看>>