上一页 1 2 3 4 5 6 7 8 9 10 ··· 19 下一页

2013年8月20日

Codeforces4D - Mysterious Present(LIS)

摘要: 题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]#include #include #include using namespace std;#define MAXN 5006int pre[MAXN],dp[MAXN];pair,int> a[MAXN];void... 阅读全文

posted @ 2013-08-20 21:05 仗剑奔走天涯 阅读(223) 评论(0) 推荐(0) 编辑

UVa10635 - Prince and Princess(LCS转LIS)

摘要: 题目大意 有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n^2之间的整数。两个序列的第一个元素均为1.求出A和B的最长公共子序列长度。 题解 这个是大白书上的例题,不过这题真的很好,很考验思维。因为p和q都是250^2=62500,如果用LCS的话时间复杂度是O(pq),显然会超时。。。。不过这题的两个序列很特殊,就是没有重复的元素,这样可以把A中的元素重新编号为1... 阅读全文

posted @ 2013-08-20 20:47 仗剑奔走天涯 阅读(271) 评论(0) 推荐(0) 编辑

UVa10534 - Wavio Sequence(LIS)

摘要: 题目大意 给定一个长度为n的整数序列,求个最长子序列(不一定连续),使得该序列的长度为奇数2k+1,前k+1个数严格递增,后k+1个数严格递减。注意,严格递增意味着该序列中的两个相邻数不能相同。n#include #include #include using namespace std;#define MAXN 10005int a[MAXN],c[MAXN],d[MAXN];int n;vo... 阅读全文

posted @ 2013-08-20 20:31 仗剑奔走天涯 阅读(240) 评论(0) 推荐(0) 编辑

UVa1424–Salesmen(DP)

摘要: 题目大意 给定一个包含n(n#include #include #include using namespace std;#define MAXN 105#define INF 0x7fffffffint dp[MAXN*2][MAXN];bool grah[MAXN][MAXN];int a[MAXN*2];int main(){ int T; scanf("%d",&T); ... 阅读全文

posted @ 2013-08-20 20:23 仗剑奔走天涯 阅读(229) 评论(0) 推荐(0) 编辑

UVa11404 - Palindromic Subsequence(区间DP+打印路径)

摘要: 题目大意 给定一个字符串,要求你删除尽量少的字符,使得原字符串变为最长回文串,并把回文串输出,如果答案有多种,则输出字典序最小的 题解 有两种解法,第一种是把字符串逆序,然后求两个字符串的LCS,并记录LCS,长度就等于最长回文串的长度,不过求出来的LCS不一定是回文串,例如下面这个例子 s = 1 5 2 4 3 3 2 4 5 1reverse(s) = 1 5 4 2 3 3... 阅读全文

posted @ 2013-08-20 16:40 仗剑奔走天涯 阅读(310) 评论(0) 推荐(1) 编辑

2013年8月18日

Codeforces149D - Coloring Brackets(区间DP)

摘要: 题目大意 要求你对一个合法的括号序列进行染色,并且需要满足以下条件 1、要么不染色,要么染红色或者蓝色 2、对于任何一对括号,他们当中有且仅有一个被染色 3、相邻的括号不能染相同的颜色 题解 用区间dp[i][j][cl][cr]表示区间[i,j]被染色之后(第i个括号被染成cl色,第j个括号被染成cr色)的合法方案数 分为匹配和不匹配两种情况来处理,需要用到乘法原理,用记忆化比较好写~~~具体请... 阅读全文

posted @ 2013-08-18 17:18 仗剑奔走天涯 阅读(297) 评论(0) 推荐(0) 编辑

2013年8月17日

Codeforces10D–LCIS(区间DP)

摘要: 题目大意 给定两个序列,要求你求出最长公共上升子序列 题解 LIS和LCS的合体,YY好久没YY出方程,看了网友的题解,主要是参考aikilis的,直接搬过来好了 经典的动态规划优化。 用opt[i][j]表示s[0..i-1]与t[0..j-1]的以t[j-1]结尾的最长上升公共子序列的长度,那么最后的答案是max{opt[n][j] | 1#include #include #include ... 阅读全文

posted @ 2013-08-17 20:19 仗剑奔走天涯 阅读(306) 评论(0) 推荐(0) 编辑

2013年8月16日

Codeforces245H - Queries for Number of Palindromes(区间DP)

摘要: 题目大意 给定一个字符串s,q个查询,每次查询返回s[l…r]含有的回文子串个数(题目地址) 题解 和有一次多校的题目长得好相似,这个是回文子串个数,多校的是回文子序列个数 用dp[i][j]表示,s[i..j]含有的回文子串个数,则dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]+flag[i][j](如果s[i..j]是回文子串则flag[i][j]=1,... 阅读全文

posted @ 2013-08-16 08:41 仗剑奔走天涯 阅读(286) 评论(0) 推荐(0) 编辑

2013年8月13日

POJ1159 - Palindrome(区间DP)

摘要: 题目大意 给定一个字符串S,问最少插入多少个字符可以使字符串S变为回文串 题解 用dp[i][j]表示把字符串s[i…j]变为回文串需要插入的最小字符数 如果s[i]==s[j]那么dp[i][j]=dp[i+1][j-1] 如果s[i]!=s[j]那么dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1 可以用滚动数组优化一下空间 代码: #include#include#... 阅读全文

posted @ 2013-08-13 21:37 仗剑奔走天涯 阅读(348) 评论(0) 推荐(0) 编辑

POJ2229 - Sumsets(完全背包)

摘要: 题目大意 给定一个数N,问由不同的2的幂之和能组成N的方法有多少种 题解 看完题目立马想到完全背包。。。敲完代码上去超时了。。。。后来发现是%的原因。。。改成减法就A了。。。%也太他妈耗时了吧!!!(还有一种O(n)的算法。。。) 代码: #include#include#define MOD 1000000000#define MAXN 1000005int dp[MAXN];int main(... 阅读全文

posted @ 2013-08-13 21:31 仗剑奔走天涯 阅读(338) 评论(0) 推荐(0) 编辑

POJ2250 - Compromise(LCS+打印路径)

摘要: 题目大意 给定两段文本,问公共单词有多少个 题解 裸LCS。。。 代码: #include#includeusing namespace std;#define MAXN 105string x[MAXN],y[MAXN];int path[MAXN][MAXN],dp[MAXN][MAXN];int n,m;void work(){ for(int i=1; i>s) { ... 阅读全文

posted @ 2013-08-13 21:25 仗剑奔走天涯 阅读(208) 评论(0) 推荐(0) 编辑

POJ1873 - Balance(01背包)

摘要: 题目大意 现有一个天平,它有C个挂钩和G个砝码,问有多少种方法可以使得天平平衡(砝码必须用完) 题解 其实就是让背包容量为0的方法有多少种方法,但是这样的话背包容量会出现负数,所以可以平移一下,背包容量最大值为20*25*15=7500,即平移量为7500,最后答案就是dp[G][7500] 代码: #include#include#includeusing namespace std;#defi... 阅读全文

posted @ 2013-08-13 21:17 仗剑奔走天涯 阅读(212) 评论(0) 推荐(0) 编辑

POJ3356 – AGTC(区间DP&&编辑距离)

摘要: 题目大意给定字符串X和Y,可以对字符串进行一下三种操作:1、删除一个字符2、插入一个字符3、替换一个字符每个操作代价是1,问运用以上三种操作把X变为Y所需的最小步数是多少?题解定义dp[i][j]为把X的前i个字符转换为Y的前j个字符所需的最小步数如果X[i]==Y[j]则dp[i][j]=dp[i-1][j-1]如果X[i]!=Y[j]则dp[i][j]=min(dp[i-1][j-1]+1,dp[i-1][j]+1,dp[i][j-1]+1)代码:#include#include#includeusing namespace std;#define MAXN 1005char x[MAXN 阅读全文

posted @ 2013-08-13 21:02 仗剑奔走天涯 阅读(236) 评论(0) 推荐(0) 编辑

POJ1836 - Alignment(LIS)

摘要: 题目大意 一队士兵排成一条直线,问最少出队几个士兵,使得队里的每个士兵都可以看到又端点或者左端点 题解 从左往右搞一遍LIS,然后从右往左搞一遍LIS,然后枚举即可。。。 代码: #include#include#include#includeusing namespace std;#define MAXN 1005double a[MAXN];int d[MAXN],c[MAXN];int ma... 阅读全文

posted @ 2013-08-13 20:32 仗剑奔走天涯 阅读(831) 评论(0) 推荐(0) 编辑

POJ3280 - Cheapest Palindrome(区间DP)

摘要: 题目大意 给定一个字符串,要求你通过插入和删除操作把它变为回文串,对于每个字符的插入和删除都有一个花费,问你把字符串变为回文串最少需要多少花费 题解 看懂题立马YY了个方程,敲完就交了,然后就A了,爽歪歪,哈哈~~~ dp[i][j]表示把s[i..j]变为回文的最小花费,设cost[0][ch-‘a’]和cost[1][ch-‘a’]分别为插入字符ch和删除字符ch的花费 如果s[i]==s[j... 阅读全文

posted @ 2013-08-13 20:16 仗剑奔走天涯 阅读(214) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 19 下一页

导航