swust oj1167,swustoj1178

  swust oj1167,swustoj1178

  题目传送门

  //爆搜加剪枝的过程,自己剪枝太弱了,恶补中

  //经典搜索加剪枝

  #包括cstdio

  #包括字符串

  #包含标准库函数

  #包括cctype

  #包含数学函数

  #包括输入输出流

  #包含算法

  #包含矢量

  使用命名空间标准

  #定义ll龙龙

  const int maxn=70

  int L,sum,n;//L表示枚举的每一个可能的长度,总和表示所有棍子的总长度,n表示有多上根棍子

  int len[maxn];//记录每根棍子的长度

  使用的int[maxn];//每根棍子是否被标记

  //bool cmp(常量整型一,常量整型b)

  //{

  //返回

  //}

  int cmp(常量void *a,常量void *b)

  {

  return *(int *)B- *(int *)a;

  }

  int getInt(int x)

  {

  返回scanf(%d ,

  }

  bool dfs(int m,int left)//m为剩余的木棍数,左侧为当前正在拼接的木棍离L的距离差

  {

  if(m==0 left==0)返回真实的

  if(left==0)

  {

  左=L;//一根刚好拼完,给出新的初始值L

  }

  for(int I=0;我我)

  {

  如果(!使用len[i]

  {

  如果(i 0)

  {

  如果(!used[i-1] len[i]==len[i-1])

  继续;

  }

  已用[I]=1;

  if(dfs(m-1,left-len[i]))

  {

  返回真实的

  }

  其他

  {

  已用[I]=0;//回溯

  if(left==len[i]left==L)

  返回错误的

  }

  }

  }

  返回错误的

  }

  int main()

  {

  而(获取(名词)

  {

  sum=0;

  for(int I=0;我我)

  {

  getInt(len[I]);

  sum=len[I];

  }

  bool ok=false

  qsort(len,n,sizeof(len[0]),CMP);

  //sort(len,len n,CMP);

  //cout sum endl;

  for(L=len[0];l=sum/2;L )//再往上就是一根棍子了,这里显然是一个剪枝

  {

  if(总和%L)继续;//sum%l!=0则不可能是通过长度相等的棍子裁剪而来,剪枝

  memset(used,0,sizeof(used));//每次搜索都要初始化超声萃取水蒸气蒸馏

  if(dfs(n,L))

  {

  ok=真

  printf(%d\n ,L);

  打破;

  }

  }

  如果(好==假)

  printf(%d\n ,sum);

  }

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: