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 ...
随机推荐
- Redis(一)、Redis五种数据结构
Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...
- docker(部署常见应用):docker部署nginx
上回说到centos安装docker. 这次用实战,docker部署运行常见的应用. docker常用命令 参看:docker命令大全.这里不做赘述. docker部署nginx 1.docker h ...
- The name ‘InitialzeComponent’ does not exist in the current context
在Visual Studio中创建Windows Store项目,在MainPage.xaml.cs中出现错误: The name 'InitialzeComponent' does not exis ...
- Only variable references should be returned by reference
搭建完Lepus监控系统后,界面提示错误:A PHP Error was encountered Severity: Notice Message: Only variable references ...
- Spring DATA MongoDB @DBref查询,or和and联合查询
@DBref文档关联,在按该类型查询的时候,在字段名后加上关联表的字段名即可,如: Criteria.where("bloggroup.$id"), $id代表关联表的oid字段. ...
- ObjectT5:在线随机森林-Multi-Forest-A chameleon in track in
原文::Multi-Forest:A chameleon in tracking,CVPR2014 下的蛋...原文 使用随机森林的优势,在于可以使用GPU把每棵树分到一个流处理器里运行,容易并行化 ...
- Java入门第一季——从此投身Java??
找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季 一.简 ...
- AndroidStudio/Intellij 快捷键
说明 三年来一直使用Eclipse作为自己的IDE, 现在是时候走出自己的safety zone, 开始使用传说中的Intellij了. Eclipse/Intellij IDE环境为: OS X 1 ...
- IdentityServer4-HybridAndClientCredentials
一.服务器 Client设置: new Client { ClientId = "mvc1", ClientName = "后台管理MVC客户端", Clien ...
- Ubuntu 16.04 安装python3.6 环境并设置为默认
1.添加python3.6安装包,并且安装 sudo apt-get install software-properties-common 2.下载python3.6 sudo add-apt-rep ...