bzoj1187 HNOI2007 神奇遊樂園

2022-05-01 06:54:08 字數 2200 閱讀 9606

time limit: 10 sec  memory limit: 162 mb

submit: 1309  solved: 702

[submit][status][discuss]

經歷了一段艱辛的旅程後,主人公小p乘坐飛艇返回。在返回的途中,小p發現在漫無邊際的沙漠中,有一塊狹長的

綠地特別顯眼。往下仔細一看,才發現這是乙個遊樂場,專為旅途中疲憊的人設計。娛樂場可以看成是一塊大小為

n×m的區域,且這個n×m的區域被分成n×m個小格仔,每個小格仔中就有乙個娛樂專案。然而,小p並不喜歡其中

的所有娛樂專案,於是,他給每個專案乙個滿意度。滿意度為正時表示小p喜歡這個專案,值越大表示越喜歡。為

負時表示他不喜歡,這個負數的絕對值越大表示他越不喜歡。為0時表示他對這個專案沒有喜惡。小p決定將飛艇停

在某個小格中,然後每步他可以移動到相鄰的上下左右四個格仔的某個格仔中。小p希望找一條路徑,從飛艇所在

格出發,最後又回到這個格仔。小p有乙個習慣,從不喜歡浪費時間。因此,他希望經過每個格仔都是有意義的:

他到乙個地方後,就一定要感受以下那裡的驚險和刺激,不管自己是不是喜歡那裡的娛樂專案。而且,除了飛艇所

在格,其他的格仔他不願意經過兩次。小p希望自己至少要經過四個格仔。在滿足這些條件的情況下,小p希望自己

玩過的娛樂專案的滿意度之和最高。你能幫他找到這個最高的滿意度之和嗎?

第一行為兩個正整數n和m,表示遊樂場的大小為n×m。

n和m滿足:2<=n<=100,2<=m<=6。

接下來的n行,每行有m個整數,第i行第j列表示遊樂場的第i行第j列的小格仔中的娛樂專案的滿意度,

滿意度的範圍是[-1000,1000]。同一行的兩個整數之間用空格隔開。

輸出檔案中僅一行為乙個整數,表示最高的滿意度之和。

4 4100 300 -400 400

-100 1000 1000 1000

-100 -100 -100 -100

-100 -100 -100 1000

4000

分析:把bzoj1814的模板改一改就能用了. bzoj1814是要求迴路必須經過所有的非障礙點,為了滿足此限制,要求必須在最後乙個非障礙點形成迴路,這道題就不同了,在任何地方都能形成迴路,如果形成了迴路,直接統計答案即可,不需要再加入到狀態中.

#include #include 

#include

#include

using

namespace

std;

const

int maxn = 10010,inf = 1000000000

;int n,m,a[110][110],now,pre,ans,pow[110

];struct

node

void push(int x,int

v)

}sum[tot] =v;

sta[tot] =x;

nextt[tot] =head[hashh];

head[hashh] = tot++;

}} f[2];

int turnleft(int x,int

pos)

intget(int x,int

pos)

int del(int x,int i,int

j)int findr(int x,int

pos)

}int findl(int x,int

pos)

}void solve2(int x,int y,int

k)

else

if (!p || !q)

else

if (p == 1 && q == 1

) f[now].push(staa ^ turnleft(3,findr(staa,y)),v +a[x][y]);

else

if (p == 2 && q == 2

) f[now].push(staa ^ turnleft(3,findl(staa,y - 1)),v +a[x][y]);

else

if (p == 2 && q == 1

) f[now].push(staa,v +a[x][y]);

else

}void

solve()

}}int

main()

bzoj1187 HNOI2007 神奇遊樂園

題目鏈結 乙個 n m 的矩陣,其中每乙個位置有乙個權值,求一條迴路使得經過的位置的權值和最大。插頭dp,插頭維護連通資訊,更新答案的條件就是合併的左插頭和右插頭屬於同一連通塊,且當前狀態已經沒有其它插頭了。更新完答案後這個狀態不會再被記入下一次dp。bzoj1185 include include...

狡猾的商人 bzoj1202,HNOI2005

ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...

bzoj 2326 HNOI2011 數學作業

題目大意 給你n,m,求concatenate 1.n mod m的值 concatenate 1.n 代表把1到n連起來 比如n 13時 concatenate 1.n 就是12345678910111213 n 10 1 m 10 9 這題很水,對於n,將其分開,比如145,就分成1 9,10 ...