第六周總結 修正版

2021-10-04 18:44:21 字數 4270 閱讀 4757

一、知識總結

(1)滾動陣列

二維dp只需兩行或兩列時,用[1][0]來輪換表示[j],

[j-1],從而降低空間複雜度。

j1=1;dp[i][j11]借助是j1的值在1,0間反覆換。

(2)省時輸入

scanf輸入比cin輸入節省時間,但輸入多種型別

時cin更方便。所以遇到輸入量特別大時,如果

想 用cin,需要先做處理。

//**

int main

//二、重要**樣例

g-ga project manager wants to determine the

number of the workers needed in every

month. he does know the minimal number

of the workers needed in each month. when

he hires or fires a worker, there will be some

extra cost. once a worker is hired, he will get

the salary even if he is not working. the

manager knows the costs of hiring a worker,

firing a worker, and the salary of a worker.

then the manager will confront such a

problem: how many workers he will hire or

fire each month in order to keep the lowest

total cost of the project.

input

the input may contain several data sets.

each data set contains three lines. first line

contains the months of the project planed to

use which is no more than 12. the second

line contains the cost of hiring a worker, the

amount of the salary, the cost of firing a

worker. the third line contains several

numbers, which represent the minimal

number of the workers needed each month.

the input is terminated by line containing a

single 『0』.

output

the output contains one line. the minimal

total cost of the project.

sample input

34 5 6

10 9 11

0sample output

199**:

#include

using namespace std;

const

int inf=

0x3f3f3f3f

;int dp[20]

[100000];

intmain()

,maxn=

0,sum=inf;

scanf

("%d%d%d"

,&hire,

&salary,

&fire)

;for

(int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++)}

for(

int i=month[1]

;i<=maxn;i++

)

dp[1]

[i]=

(hire+salary)

*i;for

(int i=

2;i<=n;i++)}

}for

(int i=month[n]

;i<=maxn;i++

) sum=

min(sum,dp[n]

[i])

;printf

("%d\n"

,sum)

;return0;

}

j-j

now here is a matrix with letter 『a』,『b』,『c』,『w』,『x』,『y』,『z』

and you can change 『w』 to 『a』 or 『b』, change 『x』 to

『b』 or 『c』, change 『y』 to 『a』 or 『c』, and change 『z』 to

『a』, 『b』 or 『c』. after you changed it, what』s the

largest submatrix with the same letters you can

make?

input

the input contains multiple test cases. each

test case begins with m and n (1 ≤ m, n ≤

1000) on line.

then come the elements of a matrix in

row-major order on m lines each with n

letters. the input ends once eof is met.

output

for each test case, output one line containing

the number of elements of the largest

submatrix of all same letters.

sample input

2 4abcw

wxyz

sample output

3

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e3+10;

char g[maxn]

[maxn]

;int dp[maxn]

[maxn]

,area,n,m;

void

get_area()

for(

int j=m-

1; j>=

1; j--

)for

(int j=

1; j<=m; j++)}

}int

main()

area=

0; memset (dp,

0,sizeof (dp));

for(

int j=

1; j<=m; j++)}

get_area()

;

memset (dp,

0,sizeof (dp));

for(

int j=

1; j<=m; j++)}

get_area()

;

memset (dp,

0,sizeof (dp));

for(

int j=

1; j<=m; j++)}

get_area()

;printf

("%d\n"

,area);}

return0;

}

三、做題感想

vjudge有幾個題,我抄的別人的狀態轉移方程。 在草稿紙上演算發現dp陣列不一定要必須連續 賦值。像g-g題的狀態轉移方程有些行只有一列 被賦值,其餘列都是初值0,而且存在對同乙個 變數多次賦值的情況。另一情況是動態規劃中也有題目要用輔助函式, 麻煩的是像j-j一樣要多次用到輔助函式。這幾天做動態規劃,覺得自己在思維方面很差, 許多狀態轉移方程都是搜出來的,最核心的部分 自己不會,一定有後患。我應該擠時間把線性 dp的例題做一遍。ppt有較為詳細的思路介紹, 有些題也是經典題目,先掌握最大欄位和,分配 等基礎問題才會有個好底子。

第六周總結

2 關於register 提高速度 儲存型別說明符 register要求變數儲存在cpu暫存器中,所以不能用取位址符 取其位址,並且,在全域性變數的地方不能出現register 防止儲存型別不唯一引起的衝突。同時,register 變數必須是能被cpu暫存器所接受的型別。這就意味著,register...

總結第六周

這一周從時間意義上也算是國慶假期後的第一周,學弟學妹也正式踏入了校園,我們工作室的招新工作也相繼展開,截止到此時此刻,還有資料專業和物聯專業的學弟學妹沒有來到我們工作室進行參觀,這兩天也挺累的,但也從中收穫到了許多東西,比如 在人多的時候講話可以更淡定一點,沒有那麼緊張 跟學弟學妹交流用怎樣的方式更...

第六周總結

這週呢,雖然完成了地鐵的測試,面勉強強過關了,但是我總覺得如果我不完善一下的話,會對不起自己的苦勞,所以我就繼續完善了一下。完成了地鐵的展示,其實心裡還是有一絲小激動的。老師說我們的注釋寫的不錯,這個,嗯,值得發揚光大。本週主要是繼續完善地鐵售票系統,因為以前寫的bug還是很多的,還有演算法的完善,...