**:
搜狗: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...