OpenJudge90 序列DP 亂搞 滑雪

2022-06-02 16:03:13 字數 1226 閱讀 3157

michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子

1  2  3  4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。輸入輸入的第一行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0<=h<=10000。輸出輸出最長區域的長度。

5 5

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

25

用結構體存下每個點高度和橫縱座標,然後按高度由大到小排序,n2判斷合法且可以到達的點,然後轉成序列dp即可。

ac**:

1 #include 2 #include 3 #include 4

using

namespace

std;

5int n,m,cnt,ans=-1;6

int dp[20010];7

struct pack data[20010];8

int cmp(const pack &a,const pack &b)

11int jdg(int x,int

y)18

intmain()

25 sort(data+1,data+1+cnt,cmp);

26for(int i=1;ii)

27for(int j=i+1;j<=cnt;++j)

28if(jdg(i,j)&&data[j].ht1

);29

for(int i=1;i<=cnt;++i)

30if(dp[i]>ans) ans=dp[i];

31 printf("

%d",ans+1

);32

return0;

33 }

JZOJ 3889 序列問題 dp

傳送門 在乙個序列中選出兩個集合s ss和t tt,使得s ss中的每個數異或起來等於t tt中 的每個數與起來 設f i,j,k 0.2 f fi j,k 0.2 表示做到第i ii個數,結果為j jj的方案數,k 0 k 0k 0表示在此之前並沒有任何操作,k 1 k 1k 1表示已經開始與操作...

bzoj2958 序列染色 DP

題目 傳送門 題解 大難題啊 還是我太菜了 一發大佬qtt 1 include2 include3 include4 include5 include6 define mod 1000000007 7using namespace std 8 typedef long long ll 9 intn,...

HDU 5256 序列變換 線性DP

我們有乙個數列a1,a2.an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。請輸出最少需要修改多少個元素。input 第一行輸入乙個t 1 t 10 表示有多少組資料 每一組資料 第一行輸入乙個n 1 n 105 表示數列的長度 第二行輸入n...