發現本題中,每個小朋友是否高興僅取決於其後五個動物的情況,我們可以用狀壓dp解決本題
首先已處理 num[i][s] 表示對於位置 i ,狀態為 s 時有多少在 s 的同學滿意
轉移方程很好寫
dp[i][s] = max(dp[i - 1][(s&15)<<1], dp[i - 1][(s&15)<<1|1]) + num[i][s];
但是本題是環狀的所以我們要列舉開始的狀態,答案就是 dp[n][列舉的狀態]
#include #include #include #include #include #include #include using namespace std;
const int maxn = 10055;
int init()
while(c >= '0' && c <= '9')
return fh * rv;
}int n, m, num[maxn][35], dp[maxn][35], ans;
int main()
for(int j = 1; j <= c; j++)
for(int j = 0; j < 32; j++)
} for(int s = 0; s < 32; s++)
} ans = max(ans, dp[n][s]);
} cout << ans << endl;
return 0;
}
洛谷 P2375 NOI2014 動物園
其實對於乙個sum i 其值就等於sum next i sum next next i 1,然後我們可以記憶化,然後題目裡又有乙個限制,就是前字尾不能重合,那我們就找到最大但是不重合的那種情況,然後往小了列舉就好了.最後答案說要取模,所以不要忘了 ljx xhy yyq 排名無先後 1 includ...
洛谷P2375 NOI2014 動物園
題目大意 求出乙個字串 s 每一位的 num i 最多 5 組詢問,s leqslant10 6 num i 定義為 s 中長度不超過 lfloor dfrac i2 rfloor 的 border 的個數 題解 類似 kmp 發現乙個字串 border 的 border 一定是原串的 border...
洛谷2375 BZOJ 3670動物園題解
題目鏈結 洛谷鏈結 我們發現題目要我們求的num i 東西本質上其實是 求有多少以i結尾的非字首且能與字首匹配的字串,而且要求字串長度小於 i 2 我們先不考慮字串長度的限制,看所有以i結尾的非字首且能與字首匹配的字串如何計數 考慮到kmp演算法的next陣列求解的過程,大家應該都想到i結尾的非字首...