NOIP模擬題 最佳旅行

2021-08-09 18:14:45 字數 1773 閱讀 2559

description

bsny在杭州旅行,想去

n 個景點,於是他找來

n個導遊,每個導遊負責帶bsny去乙個景點玩一天,因此需要

n 個導遊。這個

n個導遊對於

n 個景點有不同的熟悉度和喜愛度。為了旅遊愉快,bsny想盡量讓每個導遊可以去熟悉度和喜愛度最高的景點,但顯然無法滿足所有導遊,因為bsny希望想一種方案,使得每個導遊的熟悉度總和與喜愛度總和之

積最大。你能告訴他最大能達到多少嗎?

input

第一行乙個數n。

接下來乙個n∗

n 的矩陣,其中元素fi

,j代表導遊

i 對景點

j的熟悉度。

接下來乙個n∗

n 的矩陣,其中元素li

,j代表導遊

i 對景點

j的喜愛度。

n<=

17 ,

1<=fi

,j,l

i,j<=1,

000

output

僅一行表示最大的熟悉度總和與喜愛度總和之積。

sample input

3 1 2 3

2 3 1

3 1 2

1 2 3

2 3 1

3 1 2

sample output

81樣例解釋

1導遊選擇3景點,2導遊選擇2景點,3導遊選擇1景點。

於是熟悉度之和為(3+3+3)=9, 喜愛度之和為(3+3+3)=9, 積為9*9=81 這個是最大方案。

hint

思路

這道題的資料範圍很小,一定是搜尋。但是一般的搜尋會tle,那麼要想一些優化措施了,令fi

,s表示選擇了

i 個景點的狀態為

s的最大熟悉度之和,gi

,s表示選擇了

i 個景點的狀態為

s的最大喜愛度之和,如果當前選擇的熟悉度之和為su

mx,喜愛度之和為su

my,最終答案為an

s ,那麼(s

umx+

fi,s

)∗(s

umy+

gi,s

)>=an

s 才可能更新答案,這樣剪枝所得到的時間複雜度很低了。

**

#include 

#include

const

int maxn=17;

int n,f[maxn+2][1

<2][1

int dfs(int now,int s,int sumx,int sumy)

if((f[now][s]+sumx)*(g[now][s]+sumy)return

0; }

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

}return0;}

int main()

}for(int i=1; i<=n; i++)

}for(int i=n; i>0; i--)}}

}dfs(1,0,0,0);

printf("%d\n",ans);

return

0;}

NOIP模擬賽 最佳組合

bzeroth 大陸最終還是覆滅了,所以你需要為地災軍團服務了。地災軍團軍師黑袍不擅長寫題面,所以你只需要看簡化版的題意即可。給定 3 個長度均為 n 的正整數序列 a b c 要求從三個序列中分別取出 3 個數 a i b j c k 使得 c k b j c k a i b j a i 最小。第...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 xx.50...