原创 求一個字符串的最長連續迴文串(模板)

Manacher算法 #include<vector> #include<iostream> using namespace std; const int N=300010; int n, p[N]; char s[N], str[N

原创 HDU 2870 Largest Submatrix

這個題還是矩陣問題。做過一個這樣的了。 還是找一個完全子矩陣,使得包含的相同元素最多。 還是  l【】  r【】 這樣遞推。。 #include <iostream> #include <cstdio> #include <cstdl

原创 codeforce #277 C. Palindrome Transformation

這個題還是比較考思路的。 到時間了都沒做出來。 一直WA在第二組樣例。  今早上看了樣例之後 知道了 是 沒有取絕對值的問題, 取了之後 就AC了。 思路應該是這樣的。 如果把一個字符串給變成迴文串,其實只需要在字符串的前一半或者後一

原创 HDU 1176免費餡餅

是一個數塔問題。 沒看出來。 一開始沒看出來 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #

原创 ZOJ 3802 Easy 2048 Again(壓縮dp)

我的dp水平還想不透 壓縮dp 更不用說 做出來了。 對於這個題。 用二進制保存當前狀態。 前提是發現規律。 只有當遞減序列的時候纔可能出現壓縮。 用 d【i】【j】 保存 到了第 i個數的時候  狀態爲j的分數最大值。j狀態也就是說

原创 HDU 1158 Employment Planning

HDU上的這個破題太噁心了。 數據都不給範圍。 我想出了做法都不敢寫。 想的三層循環真害怕超時。 還有數組越界。。 我也是醉了 只好試試。還對了。。 這個題挺簡單的。就是求某一個月份多少人的最小值 d【i】【j】。 注意一個問題。

原创 HDU 2059 龜兔賽跑

這個dp 實在是秒。  起初自己的設想是  d【i】  來表示 達到某一個點時的最短距離。 但是這樣太麻煩。 實現太不容易。 後來去百度了一下題解。 看了大神的思路。  對於每一個充電站 假設他之前的某一個充電站是最後一個充電站。 那麼

原创 HDU 2191 珍惜現在,感恩生活

多重揹包。  超過總價錢的是完全揹包。 少於總價錢的 用 二進制優化然後按照0 1揹包做。 用 d【i】 = j 表示 當價錢爲 i 時 做多有多重的米。 具體實現代碼。 #include <cstdio> #include <a

原创 HDU 1078 FatMouse and Cheese

這個題也很簡單。 記憶化搜鎖。 對於某一個點的最大值肯定是周圍點去取一個最大值到達這, 然後對於周圍的點, 肯定也是那些點周圍的最大值, 這樣一層一層的往外擴展,找出一個最大的值 這樣就是深搜了。 要記憶化防止重複計算, 否則狀態太多

原创 HDU 1074 Doing Homework(狀態壓縮)

作業的先後順序問題、  一看最多隻有15次作業。 就可以用二進制狀態壓縮。 對於一個狀態 111 這三個作業。 可以來自 110 + 1  也可以來自 101 | (1<<2) 也可以來自 011 | (1<<3)  取一個花費時間最少

原创 HDU 5092 Seam Carving

這個題就是數塔問題。比較簡單。 要記錄路徑。 每次保存一個位置的上一個位置就行。 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #

原创 Codeforces Round #279 (Div. 2) C. Hacking Cypher

沒做出三個題。 掉分了。 坑了。 這個題首先 自己交了一次。 被HACKED 超時了。 一想。 自己是 n^2 的複雜度。 超時也是必然的。 然後改算法。  nlogn 或者  n的複雜度才行。 正着判斷好說。 直接模擬就好。 但是

原创 HDU 1789 Doing Homework again(經典貪心)

貪心題。 因爲一門作業完成時間都是一天。 所以扣分多的自然要先完成。 先按照分值 從大到小排序,再按照 時間從大到小排序。 也就是 分值越高 越晚的先做。#include <cstdio> #include <algorithm> #i

原创 HDU 1160 FatMouse's Speed

水dp啊。 一維數組搞定。 先排序。 weigh 從小到大 如果相同 speed 從大到小 然後掃一遍就好了。 對於某一個位置 找出他之前的最大的位置就好。  d【】 要初始化爲1 這個題要打印路徑。 也簡單。 對於任意一個位置。