当前位置: 首页 > news >正文

HDU 4090 GemAnd Prince 暴搜+剪枝

我在搜与某一块相连的方块时,用BFS搜的话用在HDU4989ms险过,在BOJ6012ms超时。

然而换成DFS搜在HDU2765ms,在BOJ3598ms都过了。估计这类问题DFS就是比BFS快。

不知道为什么啊?

#include<iostream> #include<string.h> #include<queue> using namespace std; int n,m,k; int g[10][10]; int best; int total; int h[8]={1,-1,0,0,1,1,-1,-1}; int gg[8]={0,0,1,-1,1,-1,1,-1}; int maxsum(){//计算此状态的最大获利(是一个剪枝) int res[10]={0},i,j; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(g[i][j]) res[g[i][j]]++; int s=0; for(i=1;i<=k;i++) s+=res[i]*res[i]; return s; } void calsum(int u,int v,bool visit[10][10],int s){//DFS搜与某一点相邻的所有点 int xx,yy,i; visit[u][v]=true; g[u][v]=0; total++; for(i=0;i<8;i++){ xx=u+h[i]; yy=v+gg[i]; if(xx<=0 || xx>n || yy<=0 || yy>m) continue; if(!g[xx][yy] || visit[xx][yy]) continue; if(g[xx][yy]!=s) continue; calsum(xx,yy,visit,s); } } void change(){//根据题目要求需要没消一次方块就下移左移 int k=n,i,j; bool flag[10]={0}; for(i=1;i<=m;i++){ k=n; for(j=n;j>=1;j--){ g[k][i]=g[j][i]; if(j<k) g[j][i]=0; if(g[k][i]){ k--; flag[i]=true; } } } k=1; for(i=1;i<=m;i++){ if(flag[i]){ if(i>k){ for(j=1;j<=n;j++){ g[j][k]=g[j][i]; g[j][i]=0; } } k++; } } } void dfs(int now){//主搜函数 bool visit[10][10]; int i,j,p,q; int tem[10][10]; if(maxsum()+now<=best) return; memcpy(tem,g,sizeof(tem)); if(best<now) best=now; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++) for(j=1;j<=m;j++){ memcpy(g,tem,sizeof(g)); total=0; if(g[i][j] && !visit[i][j]){ calsum(i,j,visit,g[i][j]); } if(total<3) continue; change(); dfs(now+total*total); } } int main(){ int i,j; while(scanf("%d %d %d",&n,&m,&k)==3){ for(i=1;i<=n;i++) for(j=1;j<=m;j++){ scanf("%d",&g[i][j]); } best=0; dfs(0); printf("%d\n",best); } }



相关文章:

  • XML作用
  • ReportViewer:隐藏和GetDefaultPageSettings
  • ETL总结(扫盲版)
  • sql server 内置MD5加密函数
  • POJ 1011 Sticks 强大的剪枝
  • 2018/3/20 noip模拟赛 5分
  • windows2003 with OpenSSH
  • java和c#通过esb服务互调用组件
  • 4、自定义cookieHandler发送请求
  • python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
  • /*在DataTable中更新、删除数据*/
  • A* 简介(Amit's A star Page中译文)
  • 文本挖掘的基本过程
  • python web开发-flask读取txt文件内容
  • (C#)获取字符编码的类
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017-09-12 前端日报
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Java反射-动态类加载和重新加载
  • Java深入 - 深入理解Java集合
  • Java小白进阶笔记(3)-初级面向对象
  • java中的hashCode
  • 警报:线上事故之CountDownLatch的威力
  • 白色的风信子
  • linux 淘宝开源监控工具tsar
  • PostgreSQL之连接数修改
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #QT(TCP网络编程-服务端)
  • #宝哥教你#查看jquery绑定的事件函数
  • $refs 、$nextTic、动态组件、name的使用
  • (9)STL算法之逆转旋转
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (ZT)一个美国文科博士的YardLife
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (七)Knockout 创建自定义绑定
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)汇编语言——简单程序
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)iOS字体
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 分布式技术比较
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net6Api后台+uniapp导出Excel
  • .NET简谈设计模式之(单件模式)
  • /bin/bash^M: bad interpreter: No such file or directory
  • @staticmethod和@classmethod的作用与区别
  • [2018-01-08] Python强化周的第一天
  • [android] 看博客学习hashCode()和equals()
  • [android] 手机卫士黑名单功能(ListView优化)
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息