搜狗笔试题

简介: 转自:http://blog.csdn.net/huangxy10/article/details/8071242 搜狗: 1,有n*n个正方形格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右走。

转自:http://blog.csdn.net/huangxy10/article/details/8071242

搜狗:
1,有n*n个正方形格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右走。一共走两次,把所有经过的格子的数加起来,求最大值。且两次如果经过同一个格子,则该格子的数只加一次。


思路:

搜索:一共搜(2n-2)步,每一步有四种走法。考虑不相交等条件可以剪去很多枝。

复杂度为O(4^n)


动态规划:

by:绿色夹克衫

详细算法思路:http://www.51nod.com/question/index.html#!questionId=657

s[k][i][j] = max(s[k-1][i-1][j-1],s[k-1][i-1][j],s[k-1][i][j-1],s[k-1][j][i])+map[i][k-i]+map[j][k-j];

复杂度为O(n^3)

  1     #include <iostream>  
  2     #define MAX(a,b) (a)>(b)?(a):(b)  
  3     using namespace std;  
  4       
  5     #define N 5  
  6     int map[5][5]={  
  7         {2,0,8,0,2},  
  8         {0,0,0,0,0},  
  9         {0,3,2,0,0},  
 10         {0,10,0,0,0},  
 11         {2,0,8,0,2}};  
 12     int sumMax=0;  
 13     int p1x=0;  
 14     int p1y=0;  
 15     int p2x=0;  
 16     int p2y=0;  
 17     int curMax=0;  
 18       
 19     /* 
 20     编号系统为: 
 21     00000 
 22     11111 
 23     22222 
 24     33333 
 25     44444 
 26     走1次:编号有:0,1 
 27     走2次:编号有:0,1,2 
 28     走5次:编号有:1,2,3,4 
 29     走k次:编号有:l,l+1,l+2...,h-1 //low,high 的计算见code 
 30     编号到map坐标的转换为: 
 31     编号i,则对应map[i][k-i]. 
 32      
 33     dp方程为: 
 34     s[k][i][j] = max(s[k-1][i-1][j-1],s[k-1][i-1][j],s[k-1][i][j-1],s[k-1][j][i])+map[i][k-i]+map[j][k-j]; 
 35     */  
 36     int dp(void){  
 37         int s[2*N-1][N][N];  
 38         s[0][0][0]=map[0][0];  
 39           
 40         for(int k=1;k<2*N-1;k++){  
 41             int h = k<N?k+1:N;     //走k次后编号上限  
 42             int l = k<N?0:k-N+1;   //走k次后编号下限  
 43             for( int i=l;i<h;i++){  
 44                 for( int j=i+1; j<h; j++){  
 45                         int t=0;  
 46                         if( k==1||i<j-1)  
 47                             t= MAX(t,s[k-1][i][j-1]);  
 48                         if( i-1>=0)  
 49                             t= MAX(t, s[k-1][i-1][j-1]);  
 50                         if( j<h)  
 51                             t= MAX(t, s[k-1][i][j]);  
 52                         if( i-1>=0&&j<h)  
 53                             t= MAX(t, s[k-1][i-1][j]);  
 54                         s[k][i][j]=t+map[i][k-i]+map[j][k-j];  
 55                 }  
 56             }  
 57         }  
 58         return s[2*N-3][N-2][N-1]+map[N-1][N-1];  
 59     }  
 60       
 61     void dfs( int index){  
 62         if( index == 2*N-2){  
 63             if( curMax>sumMax)  
 64                 sumMax = curMax;  
 65             return;  
 66         }  
 67       
 68         if( !(p1x==0 && p1y==0) && !(p2x==N-1 && p2y==N-1))  
 69         {  
 70             if( p1x>= p2x && p1y >= p2y )  
 71                 return;  
 72         }  
 73       
 74         //right right  
 75         if( p1x+1<N && p2x+1<N ){  
 76             p1x++;p2x++;  
 77             int sum = map[p1x][p1y]+map[p2x][p2y];  
 78             curMax += sum;  
 79             dfs(index+1);  
 80             curMax -= sum;  
 81             p1x--;p2x--;  
 82         }  
 83       
 84         //down down  
 85         if( p1y+1<N && p2y+1<N ){  
 86             p1y++;p2y++;  
 87             int sum = map[p1x][p1y]+map[p2x][p2y];  
 88             curMax += sum;  
 89             dfs(index+1);  
 90             curMax -= sum;  
 91             p1y--;p2y--;  
 92         }  
 93       
 94         //rd  
 95         if( p1x+1<N && p2y+1<N ) {  
 96             p1x++;p2y++;  
 97             int sum = map[p1x][p1y]+map[p2x][p2y];  
 98             curMax += sum;  
 99             dfs(index+1);  
100             curMax -= sum;  
101             p1x--;p2y--;  
102         }  
103       
104         //dr  
105         if( p1y+1<N && p2x+1<N ) {  
106             p1y++;p2x++;  
107             int sum = map[p1x][p1y]+map[p2x][p2y];  
108             curMax += sum;  
109             dfs(index+1);  
110             curMax -= sum;  
111             p1y--;p2x--;  
112         }  
113     }  
114       
115     int main()  
116     {  
117         curMax = map[0][0];  
118         dfs(0);  
119         cout <<"搜索结果:"<<sumMax-map[N-1][N-1]<<endl;  
120         cout <<"动态规划结果:"<<dp()<<endl;  
121         return 0;  
122     }  

2,有N个整数(数的大小为0-255)的有序序列,设计加密算法,把它们加密为K个整数(数的大小为0-255),再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法。
有三个子问题:
1,N<=16,要求K<=16*N.
2,N<=16,要求K<=10*N.
3,N<=64,要求K<=15*N.

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
小程序
百度2015年系统工程师笔试题
百度2015年系统工程师笔试题
|
JavaScript 开发工具 git
大厂面试-百度
大厂面经-百度
58 0
度度熊找子串(百度2017秋招真题)
度度熊收到了一个只有小写字母的字符串S,他对S的子串产生了兴趣,S的子串为S中任意连续的一段。他发现,一些子串只由一种字母构成,他想知道在S中一共有多少种这样的子串。
210 0
度度熊找子串(百度2017秋招真题)
|
算法 Java
新鲜出炉,分享一道阿里的笔试题
Hello,大家好,我是鸭血粉丝~ 最近朋友出去面试某大厂,收到一题笔试题,阿粉看了下还是挺有意思的,跟大家分享一下。 首先我们先来看下题目的要求: 现在一个文件,包含大量的 sku 数据, 我们需要针对这些数据,需要完成三道题目。 这里就不完整介绍三道题目,今天就介绍前两道题目。
|
人工智能 算法 BI
|
机器学习/深度学习 存储
|
算法 数据安全/隐私保护 机器学习/深度学习
|
算法 UED
百度霸屏?谁也霸不过百度
最近百度文库、知道、经验、拇指的百度排名很疯狂,尤其是文库。今天百度貌似有个大更新,这些百度自家产品被清理了绝大部分。
2030 0
爱奇艺笔试题
// aiqiyitest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; int fun(int a,int b) { static int m =1,i=2; i+=...
943 0
百度面试
一不小心面试了百度的两个部门,而且还是同时在面试,有点累。。。 首先是基础架构部的,这个部门太有效率的,早上一面的,然后面完马上就约二面。。不过感觉百度面试官真的很不错。。(想去现场面试,但是百度一直没有机会现场面试,全是电话面试搞定) 一面的时候,很多问题都不是太记得了,不过主要还是围绕着项目在谈,可能是在实验室一直都是做的内核相关的,所以这方面比较好问,问了很多关于这方面的问题,不过问的比较多的都是关于一个write系统调用的整个流程,这个需要从direct_io和page cache IO还分别讨论。
1205 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    25
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    25
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    27
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    23
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    29
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    21
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    19
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    19
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19