动态规划
文章平均质量分 73
aroslhy
这个作者很懒,什么都没留下…
展开
-
ZOJ 3543 Number String
d[i][j]表示1~i的全排列中以j结尾的满足要求的方法数,sum[i][j]表示d[i][1]+...+d[i][j]。最后发现d[i][j]都是中间变量,都能消掉。//2012-09-03 17:47:34 Accepted 3543 C++ 600 4124 Aros#include#include#includeusing namespace std;const原创 2012-09-03 21:05:52 · 397 阅读 · 0 评论 -
HYSBZ 2806 [Ctsc2012]Cheat
后缀自动机+单调队列优化的DP。参考了http://hi.baidu.com/wyl8899/item/568baeed5034eec2baf37d69,其实后缀处理和DP转移自己都想到了,只差单调队列的优化。做的第一道SAM+DP的题,纪念一下~//bigoceanlhy 2806 Accepted 54516 kb 2336 ms C++/Edit 2346 B 2013-02-20 20原创 2013-02-20 20:50:43 · 924 阅读 · 0 评论 -
UVA 709 Formatting Text
d[i][j]表示第i个词于第j列开始,且后面的词按规则摆放的最小代价。因为怕搞错多解时的答案,所以用了逆推。//709 Formatting Text Accepted C++ 0.020 2012-12-19 03:06:24#include#include#include#includeusing namespace std;const int MAXN = 80+原创 2012-12-19 11:10:17 · 767 阅读 · 0 评论 -
UVA 10163 Storage Keepers
方法一、d[i][j][k]表示前i个人看j个货总保险值为k时的最小花费。时间复杂度较高。//10163 Storage Keepers Accepted C++ 0.236 2012-12-14 03:23:11#include#include#includeusing namespace std;const int MAXN = 100+5, MAXM = 30+5,原创 2012-12-14 21:06:14 · 501 阅读 · 0 评论 -
UVA 10817 Headmaster's Headache
状态压缩DP,d[i][j]表示在前i个人中聘用某些人达到状态j所需的最小花费。//10817 Headmaster's Headache Accepted C++ 0.312 2012-12-13 11:14:13#include#include#include#include#includeusing namespace std;const int MAX = 16原创 2012-12-13 19:21:41 · 722 阅读 · 0 评论 -
UVA 11008 Antimatter Ray Clearcutting
明显的状态压缩DP,状态转移时要分打掉一个点或者打掉一条线,用最朴素的转移,总时间复杂度是O(2^N*N^3),姿势优越的话可以水过这题。//11008 Antimatter Ray Clearcutting Accepted C++ 2.656 2012-12-12 02:15:41#include#include#includeusing namespace std;原创 2012-12-12 10:34:16 · 484 阅读 · 0 评论 -
UVA 10913 Walking on a Grid
设d[i][j][k]为走到(i,j)经过k个负数的收益,负无穷表示无法达到这个状态。由于只能向下、左、右且不能走回头路,于是按层DP就好了。注意用long long。//10913 Walking on a Grid Accepted C++ 0.032 2012-12-10 13:29:24#include#include#includeusing namespace原创 2012-12-10 21:47:57 · 832 阅读 · 0 评论 -
UVA 10313 Pay the Price
算法:用前缀和把O(n^3)的dp优化成O(n^2)。注意:(1)long long。(2)L1、L2不一定在[1,300]内。(3)没有空行(不用处理空行能过)。//10313 Pay the Price Accepted C++ 0.056 2012-11-20 11:23:14#include#include#includeusing namespace std;co原创 2012-11-20 19:40:47 · 599 阅读 · 0 评论 -
UVA 10564 Paths through the Hourglass
设d[i][j][k]表示从i行j列往下走到底路径上的和为k的方案数。//10564 Paths through the Hourglass Accepted C++ 0.072 2012-11-14 01:49:52#include#include#includeusing namespace std;const int MAXN = 40+5, MAXM = 400+5原创 2012-11-14 18:46:54 · 559 阅读 · 0 评论 -
UVA 10534 Wavio Sequence
正反两个方向各求一遍LIS(需要O(nlogn)算法),枚举中心。//10534 Wavio Sequence Accepted C++ 0.096 2012-11-14 10:34:30#include#include#includeusing namespace std;const int MAXN = 10000+5;int N, a[MAXN];int d[2]原创 2012-11-14 18:48:43 · 578 阅读 · 0 评论 -
HDU 4433 locker
设状态d[i][j][k]表示前i位匹配,之后两位为j、k,达到此状态的最小代价。 (1)现场写的状态转移://2012-10-29 21:07:26 Accepted 4433 687MS 4552K 3686 B G++ Aros#include#include#include#include#define MAX 10#define up(x) (x+1)%原创 2012-10-29 21:12:20 · 733 阅读 · 0 评论 -
HDU 4293 Groups
每个有效的(A,B),都能对应到一个group的区间[A+1,N-B]。把每个group看作一个节点,权值为这个group的player出现的次数(且不能超过区间长度)。若两个区间不冲突,从左边的区间向右边的连一条有向边。加上源点和终点(连上所有节点),求最长路。//2012-09-16 18:56:27 Accepted 4293 156MS 2260K 1900 B G++ Aros#i原创 2012-09-16 18:55:11 · 1606 阅读 · 0 评论 -
HDU 4284 Travel
floyd+状态DP,计算哈密顿回路。也就是先计算H个点的哈密顿路径,再判断能否构成起点为1的回路。//2012-09-12 10:02:47 Accepted 4284 2531MS 4364K 1945 B G++ Aros#include#include#includeusing namespace std;const int MAXN = 100+5, MAXM = 1000原创 2012-09-12 10:05:39 · 478 阅读 · 0 评论 -
HDU 4276 The Ghost Blows Light
先把必经之路上的边权、点权置零,如果还剩时间就树形背包DP。//2012-09-12 21:12:38 Accepted 4276 390MS 424K 2093 B G++ Aros#include#include#includeusing namespace std;const int MAXN = 100+5, MAXM = 500+5;int N, T, a, b, t,原创 2012-09-12 21:14:14 · 435 阅读 · 0 评论 -
UVALive 4004 Space Beacon
先DP预处理出以i开头、长度为j、先升/降(0/1)的序列的个数:d[i][j][0/1]。再数给出的串是第几个串。// 4004 Space Beacon Accepted C++ 0.009 2013-03-27 10:52:06#include#include#include#includeusing namespace std;const int MAXN = 18+5;原创 2013-03-27 19:01:58 · 534 阅读 · 0 评论