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 ...