ac自動機+dp, 此題有倆個優化目標:最少字母使文章符合要求,並讓加成分之和盡可能高,可以把倆個目標合併成乙個,即讓刪除乙個字母所獲得的加分為乙個很小的值(此題可以取-200000),這樣優化的目標即變為是的加分最大,最後再把結果分離即可。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using std::priority_queue;
using std::vector;
using std::swap;
using std::stack;
using std::sort;
using std::max;
using std::min;
using std::pair;
using std::map;
using std::string;
using std::cin;
using std::cout;
using std::set;
using std::queue;
using std::string;
using std::istringstream;
using std::make_pair;
using std::getline;
using std::greater;
using std::endl;
using std::multimap;
typedef long long ll;
typedef unsigned long long ull;
typedef pairpair;
typedef multimapmmap;
const int maxn(1610);
const int sigma_size(26);
const int maxm(110);
const int maxe(4000010);
const int maxh(18);
const int infi((int_max-1) >> 1);
const int mod(9999991);
const ull lim(1000000000000000ull);
struct ac
inline int idx(char temp)
void insert(char *s, int tv, int ts)
u = ch[u][id];
}val[u] |= tv;
score[u] += ts;
}int que[maxn];
int front, back;
void construct()
}while(front < back)
else
ch[cur][i] = ch[f[cur]][i];}}
}};ac ac;
int table[2][maxn][1 << 9];
char str[110];
void solve(int len, int m1, int m2)
cur ^= 1;
last ^= 1;
}int ans = -infi;
for(int i = 0; i < ac.size; ++i)
ans = max(ans, table[last][i][lim]);
if(ans == -infi)
printf("banned\n");
else
}char rec[110][20];
int recv[110];
int main()
m2 = m1;
m1 = 0;
for(int i = 0; i < n; ++i)
ac.construct();
scanf("%s", str);
printf("case %d: ", ++n_case);
solve(strlen(str), m1, m2);
}return 0;
}
鄭廠長系列故事 體檢
input 輸入的第一行為乙個正整數t,表示有t組測試資料 接下去有t組測試資料,每組測試資料佔一行,包含三個整數n,k,m,n表示員工的人數,k表示體檢的專案數,m表示醫生的人數。technical specification t 1000 1 n 100 1 k 10 1 m 100 outpu...
HDU 4539 鄭廠長系列故事 排兵布陣
其實主要修改的只有2個地方,因為這個地所要求的是曼哈頓距離為2,所以在轉移上一層狀態的時候應該判斷是否左右相鄰。同時上層與上上層之間也同樣需要做這樣乙個判斷。include include includeusing namespace std const int maxn 202 int dp ma...
hdu 4529 鄭廠長系列故事 N騎士問題
題目 狀態壓縮dp 好開心,終於會寫簡單的狀態dp了,雖然一開始用long long mle了 雖然第二次陣列開小了,開成dp 8 8 1 8 1 8 了 雖然二進位製用的還很戳,比如求1的個數 雖然.include include includeusing namespace std int t,...