0x22 迭代加深
poj2248 真是个新套路。还有套路剪枝...大到小和判重
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<bitset>
using namespace std; int n,D,x[];bool bk,v[][];
void dfs(int k)
{
if(bk==true)return ;
if(k==D+)return ;
if(x[k-]>n)return ;
if(x[k-]==n)
{
bk=true;
for(int i=;i<k-;i++)printf("%d ",x[i]);
printf("%d\n",x[k-]);
return ;
} memset(v[k],false,sizeof(v[k]));
for(int i=k-;i>=;i--)
{
if(x[i]+x[i]<x[k-])break;
for(int j=i;j>=;j--)
{
if(x[i]+x[j]<x[k-])break;
if(v[k][x[i]+x[j]]==false)
{
v[k][x[i]+x[j]]=true;
x[k]=x[i]+x[j];
dfs(k+);
x[k]=;
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==)break; D=;bk=false;x[]=;
while()
{
dfs();
if(bk==true)break;
D++;
}
}
return ;
}
poj2248
送礼物 折半搜索(orz cgh队长之前教我),书上叫双向搜索。又双叒叕有套路剪枝...大到小和很明显的可行性。结果dfs时居然还要先尝试选再尝试不选。。无语
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n;int W,c[];
bool cmp(int x,int y){return x>y;} int len;int a[];
inline void dfs(int k,int d)
{
if(k==n/+)
{
a[++len]=d;
return ;
}
if(((LL)d)+c[k]<=W)dfs(k+,d+c[k]);
dfs(k+,d);
}
int mmax;
int erfen(int k)
{
int l=,r=len;int ans;
while(l<=r)
{
int mid=(l+r)/;
if(a[mid]<=k)
{
ans=a[mid];
l=mid+;
}
else r=mid-;
}
return ans;
}
inline void dfs2(int k,int d)
{
if(k==n+)
{
mmax=max(mmax,d+erfen(W-d));return ;
} if(((LL)d)+c[k]<=W)dfs2(k+,d+c[k]);
dfs2(k+,d);
}
int main()
{
scanf("%d%d",&W,&n);
for(int i=;i<=n;i++)scanf("%d",&c[i]);
sort(c+,c+n+,cmp); len=;dfs(,);
sort(a+,a+len+);len=unique(a+,a+len+)-a-;
mmax=a[len];
dfs2(n/+,);
printf("%d\n",mmax);
return ;
}#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n;int W,c[];
bool cmp(int x,int y){return x>y;} int len;int a[];
inline void dfs(int k,int d)
{
if(k==n/+)
{
a[++len]=d;
return ;
}
if(((LL)d)+c[k]<=W)dfs(k+,d+c[k]);
dfs(k+,d);
}
int mmax;
int erfen(int k)
{
int l=,r=len;int ans;
while(l<=r)
{
int mid=(l+r)/;
if(a[mid]<=k)
{
ans=a[mid];
l=mid+;
}
else r=mid-;
}
return ans;
}
inline void dfs2(int k,int d)
{
if(k==n+)
{
mmax=max(mmax,d+erfen(W-d));return ;
} if(((LL)d)+c[k]<=W)dfs2(k+,d+c[k]);
dfs2(k+,d);
}
int main()
{
scanf("%d%d",&W,&n);
for(int i=;i<=n;i++)scanf("%d",&c[i]);
sort(c+,c+n+,cmp); len=;dfs(,);
sort(a+,a+len+);len=unique(a+,a+len+)-a-;
mmax=a[len];
dfs2(n/+,);
printf("%d\n",mmax);
return ;
}
送礼物
0x22 迭代加深的更多相关文章
- POJ1129Channel Allocation[迭代加深搜索 四色定理]
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14601 Accepted: 74 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 迭代加深搜索 POJ 1129 Channel Allocation
POJ 1129 Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14191 Acc ...
- 迭代加深搜索 codevs 2541 幂运算
codevs 2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出 ...
- HDU 1560 DNA sequence (IDA* 迭代加深 搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...
- usaco4.12Fence Rails(迭代加深)
为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化.. 问题分析 抽象一下就可以发现,算法的本质是 ...
- poj2286The Rotation Game(迭代加深dfs)
链接 把迭代加深理解错了 自己写了半天也没写对 所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索.这种方法虽然会导致重复的遍历 某些结点,但 ...
- IOI1994 北京2008的挂钟 迭代加深
总的来讲,这是一道很⑨的题,因为: (1)题目中有⑨个挂钟 (2)有⑨种操作方案 (3)这题因为解空间太小所以可以直接⑨重循环!! 这题可以用迭代加深搜索高效求解,剪枝的策略也很显然: >所求的 ...
- 迭代加深搜索算法总结 + Editing a Book UVa11212题解
迭代加深搜索算法: 对于可以用回溯法解决,但是解答树结点数大的恐怖的问题的一种解决办法,有的问题甚至用bfs连一层节点都遍历不完就超时了.具体方法就是依次枚举搜索层数,从1到一个上限. 结构: int ...
随机推荐
- SwiftUI 官方教程(五)
SwiftUI官方教程(五) 5. 同时使用 UIKit 和 SwiftUI 至此,我们已准备好创建 map view 了,接下来使用 MapKit 中的 MKMapView 类来渲染地图. 在 Sw ...
- flex和layout移动端布局
1.九宫格 样式为: ul{ display: flex; flex-wrap: wrap;//超出换行 } li{ width: 33%; height: 60px; display: flex; ...
- Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
一.前期规划 1.硬件环境 CPU: Intel(R) Xeon(R) CPU E7-4820 v4 @ 2.00GHz 8*10核 内存:512GB OCR:2147*5 MB DATA1:2TB ...
- 以SqlHelper为例论面向对象中封装的使用(续)
上文以SqlHelper为例说明了面向对象中封装的好处,但是上文只是简单封装,考虑下面代码的情况: public static Activate GetByCode(string code) { Li ...
- web拼图错误分析
老师要求用web制作一个拼图游戏. 发现的问题:点击随机生成拼图的按钮后,打乱的图片会出现无法还原的情况. 发现过程:每次生成一个拼图后会测试它怎么拼回去,结果发现有时候拼不回去. 数学原理:如果两个 ...
- 企业级时间轴插件Vue-timelinepick
简介 时间范围选择插件 取当前时间之前一段时间范围 按刻,小时,天分类 在线演示及下载 在线演示:https://yelingfeng.github.io/vue-timelinepick/ 本地下载 ...
- 更换WordPress后台登录地址
在后台找到wp-content—themes—twentyfifteen(当前的网站主题)—functions.php 在代码的最下面加入以下代码: //后台唯一登录地址 add_action('lo ...
- MyBatis源码分析(各组件关系+底层原理
MyBatis源码分析MyBatis流程图 下面将结合代码具体分析. MyBatis具体代码分析 SqlSessionFactoryBuilder根据XML文件流,或者Configuration类实例 ...
- maven中tomcat7:run无法启动maven项目
这几天在学习ssm相关整合,在使用maven时,发现了一些问题,就是明明按代码都差不多就是没法运行 这个是maven主项目的pom.xml的配置,我解决的方法是添加 <maven.compile ...
- Nginx+keepalived双机热备(默认路径安装)- 基础篇
负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...