2020CSP第二輪方格取數(number)

2021-10-25 12:07:31 字數 2689 閱讀 7441

這道題的難度還是有的,比賽的時候第一直覺是dp可是感覺直接做有後效性。所以還是上爆搜吧……然後完美10分。

解題思路

最終程式

還是乖乖地學dp吧……

設有 ? × ? 的方格圖,每個方格中都有乙個整數。現有乙隻小熊,想從圖的左上角走到右下角,每一步只能向上、向下或向右走一格,並且不能重複經過已經走過的方格,也不能走出邊界。小熊會取走所有經過的方格中的整數,求它能取到的整數之和的最大值。

輸入輸入檔名為 number.in。

第 1 行兩個正整數 ?, ?。

接下來 ? 行每行 ? 個整數,依次代表每個方格中的整數。

輸出輸入檔名為 number.out。

乙個整數,表示小熊能取到的整數之和的最大值。

樣例輸入

3 41 -1 3 2

2 -1 4 -1

-2 2 -3 -1

2 5-1 -1 -3 -2 -7

-2 -1 -4 -1 -2

-10資料範圍限制

對於 20% 的資料,?, ? ≤ 5。

對於 40% 的資料,?, ? ≤ 50。

對於 70% 的資料,?, ? ≤ 300。

對於 100% 的資料,1 ≤ ?, ? ≤ 1000。方格中整數的絕對值不超過 10^4。

還是找到了老曾,然後老曾就讓我看了看他的部落格

理解了一下就開始打了。

因為這道題不是普通的dp,所以我們就要用不普通的方法做。

首先設三個狀態:

up: 設 ui,

ju_

ui,j

​ 為(i,j)從上面過來的最大值。

down:設 di,

jd_

di,j

​ 為(i,j)從下面過來的最大值。

left:設 li,

jl_

li,j

​ 為(i,j)從左邊過來的最大值。

首先我們思考,如果要從上面來到(i,j)我們應該如何轉移?

因為是上面下來轉移,所以我們排除down轉移,只有剩下的兩個轉移方向,而我們就可以得知方程:ui,

j=ma

x(ui

−1,j

,li−

1,j)

u_=max(u_,l_)

ui,j​=

max(

ui−1

,j​,

li−1

,j​)

。現在考慮從左邊轉移過來的方程,左邊的話沒有限制,所以直接轉移三種方向:li,

j=ma

x(li

,j−1

,ui,

j−1,

di,j

−1

)l_=max(l_,u_,d_)

li,j​=

max(

li,j

−1​,

ui,j

−1​,

di,j

−1​)

。而從下面轉移過來的才是最特殊的,因為是從下面轉移,所以我們只能另起乙個迴圈從n-1to1。而這裡,就排除掉了從上面轉移的可能:di,

j=ma

x(di

+1,j

,li+

1,j)

d_=max(d_,l_)

di,j​=

max(

di+1

,j​,

li+1

,j​)

最終答案,從上面或左邊轉移過(n,m)的最大值。

#include

using

namespace std;

#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)

int n,m;

int a[

1005][

1005];

long

long f[

1005][

1005

],u[

1005][

1005

],d[

1005][

1005

],l[

1005][

1005];

long

long

max(

long

long x,

long

long y)

intmain()

u[1][

1]=d[1][

1]=l[1][

1]=a[1][

1];for

(int j=

1;j<=m;

++j)

for(

int i=n-

1;i>=1;

--i) d[i]

[j]=

max(d[i+1]

[j],l[i+1]

[j])

+a[i]

[j];

}printf

("%lld"

,max

(l[n]

[m],u[n]

[m]));

return0;

}

2020 CSP第二輪 入門組 優秀的拆分

不得不說,這題還是有點上頭的。還是那句話 當你意識到普及組不簡單時,一切已經晚了 一般來說,乙個正整數可以拆分成若干個正整數的和。例如,1 1,10 1 2 3 4 等。對於正整數 的一種特定拆分,我們稱它為 優秀的 當且僅當在這種拆分下,被分解為了若干個不同的 2 的正整數次冪。注意,乙個數 能被...

CSP2020第二輪遊記

今年csp第二輪在jz考 嘛,因為初賽去過了。就沒什麼感覺了 超大,徒步的話腳直接 廳沒有可以睡舒服的地方差評 中午起來後,就是迷迷糊糊的進入考場 然後看題之前,密碼一直不對。後來發現忘打括號心態 之後看第一題 好傢伙,等我先打個暴力 30min later 可以 年1e9 直接二分 但就是一直調。...

CSP2020第二輪J組簡析

祝各位noiprp 題,奇數 1,偶數從大往小列舉2的次方 include using namespace std int n,k long long a 30 int main a 0 1 k 0 while a k n a k 1 a k 2 k for int i k i i if a i n...