昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了。。。
洛谷P3183 [HAOI2016]食物链
题目描述
如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3…am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链
输入格式
第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系。(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)1<=N<=100000 0<=m<=200000题目保证答案不会爆 int
输出格式
一个整数即食物网中的食物链条数
输入:

10 16
1 2
1 4
1 10
2 3
2 5
4 3
4 5
4 8
6 5
7 6
7 9
8 5
9 8
10 6
10 7
10 9

输出:

9

题解:这个题可能稍稍的用到了图论里面的少许内容,主要是运用了链向式前向星存图+拓扑排序,可以简单地理解为从入度为零的点到出度为零的点一共有几条,这样的话当一个链特别长的时候,我们会发现一个点可能会重复的出现在好几个链当中,那么如果不记忆的话,这个点之前的所有情况我们要反复的去搜索,这样会浪费掉很多时间,所以将他记录下来是一个不错的解决方法。

#include <bits/stdc++.h>
using namespace std;
struct{int to,next;
}a[200010];
int head[200010];
int rem[200010];
int in[100010];
int out[100010];
int cnt=0;
void add(int u,int v){  //链向式前向星存图a[++cnt].to=v;a[cnt].next=head[u];head[u]=cnt;
}
int dfs(int x){if(rem[x]) return rem[x];  //如果这个点之前的情况已经被记录过了,那么就直接调用之前统计的情况int ans=0;if(out[x]==0) return 1;  //找到出口,情况+1for(int i=head[x]; i;i=a[i].next){ans+=dfs(a[i].to);  //从这个点通向其他路}rem[x]=ans;  //记录return ans;  //返回总数目
}
int ans=0;
int main() {int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);in[y]++;out[x]++;}for(int i=1;i<=m;i++){if(in[i]==0&&out[i]!=0){//我们要遍历每个入读为0的点,并且单个点不为一条食物链ans+=dfs(i);}}cout<<ans<<endl;return 0;
}

P5635 【CSGRound1】天下第一
题目描述:
游戏是这样的:
给定两个数x, y,与-个模数Mod.
cbw拥有数x, zhouwc拥有数y。
第一个回合: x= (x + y)%Mod.
第二个回合: y= (x + y)%Mod.
第三个回合: x= (x + y)%Mod.
第四个回合: y= (x + y)%Mod.
以此类推…
如果x先到0,则cbw胜利。如果y先到0,则zhouwc胜利。如果x,y都不能到0,则为平局。
cbw为了捍卫自己主席的尊严,想要提前知道游戏的结果,并且可以趁机动点手脚,所以他希望你来告诉他结果。
输入格式:
有多组数据。
第一行: T和Mod表示-共有T组数据且模数都为Mod.
以下T行,行两个数x, Y。
输出格式:
共T行
1表示cbw获胜, 2表示zhouwc获胜,error 示平局。
输入样例:

1 10
1 3

输出样例

error

题解:这里记忆化的关键就是可能会重复出现某两个数记录的原因有两个,一是为了判断是否error,二是因为有多组数据,我们可以减少其中的计算量。

#include <bits/stdc++.h>
using namespace std;
short rem[10010][10010];  //开short为了防止mle
int t,mod;
int dfs(int x,int y){if(rem[x][y]) return rem[x][y];if(rem[x][y]==-1)  return 3;  //!!一定要注意这个要放在上一行的下面!rem[x][y]=-1;   //标记这两个数已经走过一次了if(x==0)  return rem[x][y]=1;if(y==0)  return rem[x][y]=2;return rem[x][y]=dfs((x+y)%mod,((x+y)%mod+y)%mod);
}int main() {cin>>t>>mod;while(t--){int x,y;cin>>x>>y;int ans=dfs(x,y);if(ans==1) cout<<ans<<endl;else if(ans==2)  cout<<ans<<endl;else   cout<<"error"<<endl;}  return 0;
}

**devc++真的是用不惯 **

记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )相关推荐

  1. 洛谷 P3183 [HAOI2016]食物链

    题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...

  2. 2010提高组-乌龟棋 [记忆优化搜索]

    题目: 有n个格子,你有m张牌,每张牌上面有个数字,用了这张牌你就可以走这张牌上对应的数字了,每到达一个格子,你就会获得格子上相应的分数,问你如何合理的出牌,使分数最大化. 记忆优化搜索可能会好写一点 ...

  3. 图解Topo拓扑排序 例题洛谷P4017 最大食物链计数

    适用条件:无环图 输出结果:使得每个节点,以它为终点的起点节点排都在其前面 作用:递推保证前面的节点都已经被使用过 实现方法:从没有入边的节点开始,输出并从其他节点中删去自己,重复此步骤直到所有节点都 ...

  4. 深度优先搜索——单词方阵(洛谷 P1101)

    题目选自洛谷P1101 这道题也是挺不错的DFS的题,但是区别于一般的深搜, 这道题在选定一个方向后,就不能改变了! 给出我的详细思路就是: 用char a[101][101]保存输入的数据,int ...

  5. 深度优先搜索——选数(洛谷 P1036)

    今天的题是一道深度优先搜索的题 题目链接 选自洛谷(P1036) 是一道很经典的DFS问题 首先我们先看一下题目是怎么描述的,读完题目我会在后面给出详细的思路! 题目描述 已知 nn 个整数 x_1, ...

  6. 数论 GCD 最大公约数 欧拉函数经典题 洛谷 CF1295D Same GCDs Codeforces1295D

    ​前言 两个月了,我终于更了-- 这两个月忙(chen)于(mi)内(xiang)卷(le),现在终于出新文章啦,(也算兑现了当初的出数论题文章的承诺)~ 不说废话了,今天给大家介绍一道CF/洛谷上的 ...

  7. codeforces 424E Colored Jenga (状态压缩,概率dp用hash记忆优化搜索)

    题意: 给出以最多6层的积木,每层可以由三个木块拼成,总共有三种颜色的木块,开始时给出了积木的排列情况,我们每次可以从积木中抽一块木块,抽木块的规则是投骰子,骰子分别投到red,blue,green, ...

  8. 洛谷P3183食物链题解

    不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...

  9. 数位dp入门题 洛谷P2657 [SCOI2009] windy 数

    题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...

最新文章

  1. 怎样配置VNC服务器使其能在红帽企业Linux3系统引导时自动启动?
  2. 云炬随笔20211016(2)
  3. 7 自动开启网卡_从Qlogic发展历程看与RDMA网卡的关系
  4. VTK:PolyData之AttachAttributes
  5. 我如何将Google I / O 2018的兴奋带给尼日利亚沃里的115个人
  6. CanFestival移植准备工作
  7. 分治-寻找第k小的数
  8. 华三 h3c ppp配置
  9. 编程十年 (6):虚荣的C
  10. Java练手小游戏集结,你还在等什么
  11. excel自动调整列宽_高效使用Excel透视表,必须要注意的十个细节
  12. XP系统计算机桌面图标不见,xp如何显示桌面图标?windows xp系统桌面图标消失的解决方法...
  13. 系统之家启动维护光盘v3.0[小盘·贺岁篇]
  14. (初学者)关于C语言中退格键(\b)的初步了解
  15. Unity 六边形地图系列(一) 【笔记】: 创建一个六边形网格
  16. 基于文本内容理解的中医药数据基础研究——中医药文献语料库的建设
  17. CAN控制器SJA1000波特率计算方法
  18. SQL TIMESTAMP 时间日期比较语句
  19. 天载股票开户大宗商品价格上涨引关注
  20. android 实现发送彩信方法 (mms),非调用,android 实现发送彩信方法 (MMS),非调用系统界面...

热门文章

  1. 汇编语言中带点/小数点的是什么
  2. ACMNO.50 完美的代价(主要是不同情况下面的讨论)
  3. Traceback (most recent call last): File AttributeError: 'NoneType' object has no attribute 'group'
  4. 利用OpenCV+ConvNets检测几何图形
  5. 图像色彩空间与应用转换
  6. 卡尔曼滤波:究竟滤了谁?
  7. Java 异常处理的 9 个最佳实践
  8. 前端基础---HTML
  9. SQL语句的增删改查
  10. unix编程艺术的设计原则