一、知識總結
(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還是很多的,還有演算法的完善,...