牛客小白月賽4 D 郊區春遊

2021-08-20 20:06:06 字數 881 閱讀 8072

思路:一開始以為是可以暴搜的,然後發現只過了50的樣例,後來才知道原來是個狀壓的裸題。

先用floyd預處理每個點之間的最短路,然後對於要去的地方(最多15個,所以是狀態最多不到32768)進行狀壓。

#include  

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxn = 205;

int e[maxn][maxn];

int n, m, r;

int reach[maxn];

int vis[maxn];

int ans = inf;

int dp[50000][20];

int main()

for(int i = 1; i <= n; i++) e[i][i] = 0;

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

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

memset(dp, inf, sizeof(dp));

for(int i = 0; i < r; i++) dp[1

<< i][i + 1] = 0;

for(int s = 0; s < (1

<< r); s++) }}

int min = inf;

int s = (1

<< r) - 1;

for(int i = 1; i <= r; i++) min = min(min, dp[s][i]);

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

return

0;}

牛客網小白月賽D

題目 水果店裡有 n個水果排成一列。店長要求顧客只能買一段連續的水果。小陽對每個水果都有乙個喜愛程度 ai,最終的滿意度為他買到的水果的喜歡程度之和。如果和為正 不管是正多少只要大於 0 即可 他就滿意了。小陽想知道在他滿意的條件下最多能買多少個水果。你能幫幫他嗎?輸入描述 第一行輸入乙個正整數 n...

牛客網 小白月賽 D題

位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n 1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?輸入描述 第一行乙個整數n表示有n個數接下來一行n個數表示a1,a2 an第一行乙個整數n表示有n個數接下來一行n個數表示a...

牛客小白月賽13 D題

位運算是乙個非常重要的東西。而小a最近在學習位運算,小a看到了一道很簡單的例題,是說從n個數裡面選出n 1個數要讓它們或起來的值最大,小a想知道這個答案是多少。你可以幫幫他嗎?思路 預處理了一下字首l陣列和字尾r陣列,然後列舉那個不選的數就可以了,每次更新ans max ans,l i 1 r i ...