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,一共有三種顏色,分別為紅,黃,藍,現在你可以對相鄰的顏色不同的方塊進行施法,使其變成第三種顏色,比如對相鄰的紅方塊和黃方塊進行施法,就會使其合併為藍方塊。施法順序的不同,可能對最終的結果產生不同的影響,問在最優策略下,最...