搜狗筆試題

2022-02-06 00:44:26 字數 1977 閱讀 6809

**:

搜狗:1,有n*n個正方形格仔,每個格仔裡有正數或者0,從最左上角往最右下角走,只能向下和向右走。一共走兩次,把所有經過的格仔的數加起來,求最大值。且兩次如果經過同乙個格仔,則該格仔的數隻加一次。

思路:搜尋:一共搜(2n-2)步,每一步有四種走法。考慮不相交等條件可以剪去很多枝。

複雜度為o(4^n)

動態規劃:

by:綠色夾克衫

詳細演算法思路:

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 2

#define max(a,b) (a)>(b)?(a):(b)

3using

namespace

std; 45

#define n 5

6int map[5][5]=,

8 ,

9 ,

10 ,

11 };

12int 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編號系統為:

2100000

2211111

2322222

2433333

2544444

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].

3233

dp方程為:

34s[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*/

36int dp(void

) 56

} 57

} 58

return s[2*n-3][n-2][n-1]+map[n-1][n-1

];

59}

6061

void dfs( int

index)

6768

if( !(p1x==0 && p1y==0) && !(p2x==n-1 && p2y==n-1

))

69

7374

//right right

75if( p1x+1

18384

//down down

85if( p1y+1

19394

//rd

95if( p1x+1

1103104

//dr

105if( p1y+1

1113}

114115

intmain()

116

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.

搜狗筆試題

乙個長度為n的陣列a 0 a 1 a n 1 現在更新陣列的名個元素,即a 0 變為a 1 到a n 1 的積 a 1 變為a 0 和a 2 到a n 1 的積,a n 1 為a 0 到a n 2 的積。程式要求 要求具有線性複雜度。不能使用除法運算子。演算法思想 設共有n個數 n 7 建立乙個陣列...

搜狗筆試題

1 下面 中for迴圈共執行了多少次?unsigned short i,j for i 0,j 2 i j i 5,j 7 unsigned short占用2個位元組,當資料範圍到頭了 2 16 1 就又從0開始計數了,這個其實就是兩輛汽車行駛在乙個圓圈裡的汽車追及問題。乙個速度為5,乙個速度為7,...

2012搜狗校園招聘筆試題

include using namespace std int main unsigned char p unsigned char input int s 0 int temp sizeof input for int i 0 ichar v p i if v 0 s v a i printf d...