SCU2016 04 I題 最優博弈的裝壓dp

2021-07-14 18:57:47 字數 2045 閱讀 9002

analyse:

這裡先分析資料範圍和時間,可以給出很暴力的指數級別的演算法。

比如狀態壓縮dp。 定義d

p[s]

為當前選擇狀態為

s ,到選完後選手最多比後手多的寶石個數。 dp

[0]=

0,沒有

寶石了。

然後從 00000,一

直逆推到

11111即可

,每一步

暴力的選

擇任意的

數。複雜

度 2^b*b*g

, g$的複雜度來自於維護寶石個數。

get:

這種最優選擇問題,在狀態定義時,直接定義了狀態為最優,非常技巧。

從我們開始知道什麼,來得出遞推順序也很重要。

/**********************jibancanyang**************************

*author* :jibancanyang

*created time* : 一 7/11 21:49:09 2016

**problem**:

**code**:

***********************[email protected]**********************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef pair pii;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef

vector

vi;

#define pr(x) cout << #x << ": " << x << " "

#define pl(x) cout << #x << ": " << x << endl;

#define pri(a) printf("%d\n",(a))

#define xx first

#define yy second

#define sa(n) scanf("%d", &(n))

#define sal(n) scanf("%lld", &(n))

#define sai(n) scanf("%i64d", &(n))

#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++)

const

int mod = int(1e9) + 7, inf = 0x3f3f3f3f;

const

int maxn = 1e5 + 13;

int g, b, s;

int bag[22][11];

int dp[1

<< 21][11];

int main(void)

}dp[0][0] = 0;

for (int i = 1; i <= g; i++) dp[0][i] = a[i];

for (int i = 1; i <= maxs; i++) dp[i][0] = -inf;

for (int i = 0; i < maxs; i++)

dp[i ^ t][k] = a[k];

}if (ruby > 0) else }}

}pri(dp[maxs][0]);

}return

0;}

SCU2016 05 R題數學模擬

analyse 這個題就是模擬除法的過程,標記被除數第二次出現的位置即可.get 寫的時候思路遷移到正確的簡潔思路用時過長,遷移到之後寫的時間過長,不能邊寫邊完善思路,在紙上寫好才是對的.jibancanyang author jibancanyang created time 7 5 15 44 ...

SCU 2511 Moooo 單調棧模板題

題意 給出n頭牛,每頭牛都會發出乙個雜訊,為v i 這個雜訊只會被與他相鄰高度嚴格比他高的牛所聽到,問牛收到的最大的噪音是多少。解法 因為我是在黃學長部落格上找的題目23333,所以就是一道單調棧的模板題了。bzoj又把這題藏起來了,還好scu上面有這道題。直接正著跑一遍,如果當前牛的高度低於棧頂牛...

思維題 方塊 I

題目鏈結 有 n 個方塊排成一排,每個方塊都染有顏色,第 i 個的顏色為 ci,一共有三種顏色,分別為紅,黃,藍,現在你可以對相鄰的顏色不同的方塊進行施法,使其變成第三種顏色,比如對相鄰的紅方塊和黃方塊進行施法,就會使其合併為藍方塊。施法順序的不同,可能對最終的結果產生不同的影響,問在最優策略下,最...