题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1115

题意:n个军舰,m个海岸线,各个长度给出,求n个军舰怎么组成这些海岸线。

思路很简单,就是深搜,好吧,我WA了很多次在test10,错的地方是在回溯,我在处理回溯的时候,只考虑了一条海岸线的回溯,要是下个海岸线结果不能成功了,就要回溯到前一个海岸线,而我直接输出了。

解决办法: 就是把每一个军舰插入后深搜,这里有个要注意的地方是,一碰到结果,直接退出所有栈,exit(0),这样就解决了拆前一根海岸线。

两个代码都附到下面。

/*
#include <bits/stdc++.h>
using namespace std; int n,m; int dist[105];
int vis[105];
int ans[15];
int t;
int cnt; bool dfs(int k,int ans)
{
if(k>=ans)
return true;
for(int i=0; i<n; i++)
{
if(vis[i]==false&&(k+dist[i])<=ans)
{
cnt++;
vis[i] = t;
if(dfs(k+dist[i],ans)==true)
return true;
vis[i] = 0;
--cnt;
}
}
return false;
} bool cmp(int a,int b)
{
return a>b;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
scanf("%d",&dist[i]);
sort(dist,dist+n);
for(int i=0; i<m; i++)
scanf("%d",&ans[i]); t = 1;
for(int i=0; i<m; i++)
{
cnt = 0;
if(dfs(0,ans[i]))
{
printf("%d\n",cnt);
for(int i=0; i<n; i++)
if(vis[i]==t) {
printf("%d ",dist[i]);
}
puts("");
t++;
}
}
return 0;
}
*/
#include <bits/stdc++.h>
using namespace std; int a[],len[];
bool vis[];
vector<int> ans[];
int n,m; void dfs(int x)
{
if(x==m)
{
for(int i=; i<m; i++)
{
printf("%d\n",ans[i].size());
for(int j=; j<ans[i].size();j++)
printf("%d ",ans[i][j]);
puts("");
}
exit();
}
for(int i=n-; i>=; i--)
{
if(!vis[i]&&a[i]<=len[x])
{
len[x] -= a[i];
vis[i] = ;
ans[x].push_back(a[i]);
if(!len[x]) dfs(x+);
else dfs(x);
len[x] +=a[i];
vis[i] = ;
ans[x].pop_back();
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(int i=; i<m; i++)
scanf("%d",&len[i]);
dfs();
return ;
}

ural 1115,搜索的更多相关文章

  1. 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence

    题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...

  2. 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof

    题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...

  3. 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty

    题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...

  4. ural 1698. Square Country 5(记忆化搜索)

    1698. Square Country 5 Time limit: 2.0 secondMemory limit: 64 MB The first arithmetical operation ta ...

  5. Ural 1183 Brackets Sequence(区间DP+记忆化搜索)

    题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...

  6. URAL 1501. Sense of Beauty(记忆化搜索)

    题目链接 本来暴力写个TLE了,加上记忆化就A了. #include <cstring> #include <cstdio> #include <string> # ...

  7. URAL 1152. False Mirrors (记忆化搜索 状压DP)

    题目链接 题意 : 每一颗子弹破坏了三个邻近的阳台.(第N个阳台是与第1个相邻)射击后后的生存的怪物都对主角造成伤害- 如此,直到所有的怪物被消灭,求怎样射击才能受到最少伤害. 思路 : 状压,数据不 ...

  8. URAL 1698. Square Country 5(记忆化搜索)

    题目链接 题意 : 自守数的定义:如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数.例如5*5=25,则5就是自守数.让你求不超过n位的自守数有多少 思路 : 实际上,自守数还有两个性质 ...

  9. ural 1250. Sea Burial

    1250. Sea Burial Time limit: 1.0 secondMemory limit: 64 MB There is Archipelago in the middle of a s ...

随机推荐

  1. 为benchmarksql的PostgreSQL java驱动进行升级

    为benchmarksql的PostgreSQL java驱动进行升级[root@minion1 benchmarksql-4.1.0]# wget https://jdbc.postgresql.o ...

  2. Lintcode: Binary Tree Serialization (Serialization and Deserialization Of Binary Tree)

    Design an algorithm and write code to serialize and deserialize a binary tree. Writing the tree to a ...

  3. 【IOS】2.基础

    1.Identifers命名规则 Identifers is combined with letters, underline, dollars, numbers must begin with le ...

  4. Java基础(9):Java生成随机数一定范围内的数的一个典型例子

    题目:编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组 note: 通过 (int)(Math.random() * 100) 生成 ...

  5. UML: 序列图

    摘自http://www.umlonline.org/school/thread-37-1-1.html 大家都进过餐馆吃饭吧?你是如何和餐厅服务员“眉来眼去”的呢?回忆一下从你进餐馆开始到你离开餐馆 ...

  6. oracle 内外连接,左连接,右连接 区别

    首先讲解一下 on 与where后面接的条件的区别 on和where条件的区别如下:1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录.2.where条件是在 ...

  7. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  8. (转)oracle 查看表所占用的空间大小

    1.查看表所占空间 SELECT   TABLESPACE_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999')   CNT_MB     FROM   ...

  9. CDC

    CDC中最重要的问题是metastability问题. 加入Synchronizer来进行异步时钟的同步,两级的Sync,第二级仍然会出现亚稳态的概率由MTBF决定. MTBF:mean time b ...

  10. Java高效编程之一【创建和销毁对象】

    一.考虑用静态工厂方法替代构造函数 代表实现:java.util.Collection Framework Boolean类的简单例子: public static Boolean valueOf ( ...