题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1702

题目大意:给定有很多数字组成的诗,譬如 “AABB”, “ABAB”, “ABBA” and “AAAA”形式的诗句是押韵的。从中挑选,求最多可以构成多少押韵句,并且输出这些句子在原序列中的位置。

Sample Input

15
1 2 3 1 2 1 2 3 3 2 1 1 3 2 2 3
1 2 3

Sample Output

3
1 2 4 5
7 8 9 10
11 12 14 15 0

分析:设dp[i]表示从 1 到 i 之间押韵句的最大数目,f(i,j)表示当[i,j]之间可以组出一句押韵句时为1,否则为0

    则dp[i] = max{dp[i-1] , dp[j] + f(j+1,i)}

    当(i,j)之间有2个数出现的次数大于等于2时,f(i,j)=1,这2个数可以相等,即1个数出现4次

    路径打印课真是乱啊

代码如下:

  

 # include<iostream>
# include<cstdio>
# include<vector>
# include<algorithm>
using namespace std;
const int N = ;
int data[N],ks[N];
int n,kn;
int dp[N];
vector<int> path[N]; //记录路径
vector<int> pos[N];
int par[N]; //路径压缩
int out[N/]; //输出路径 void solve()
{
if(n < )
{
printf("0\n\n");
return ;
}
kn = n;
sort(ks,ks+kn); //原序列复制后排序
kn = unique(ks,ks+kn) - ks; //去重函数,返回相邻不重复的个数,即元素种类数
int i,j,k;
for(i=; i<n; i++)
{
data[i] = lower_bound(ks,ks+kn,data[i]) - ks;
//lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个大于等于value 的值。
}
for(i=; i<=; i++)
{
dp[i] = ;
par[i] = -;
}
vector<int >tmp;
for(i=; i<n; i++)
{
dp[i+] = dp[i];
path[i+] = path[i];
par[i+] = par[i];
for(j=; j<kn; j++)
pos[j].clear();
tmp.clear();
for(j=i; j>=; j--)
{
k = data[j];
pos[k].push_back(j+);
if(pos[k].size()==)
{
tmp.push_back(pos[k][]);
tmp.push_back(pos[k][]);
pos[k].clear();
if(tmp.size()==) break;
}
}
if(j >= )
{
if(dp[i+] < dp[j]+)
{
dp[i+] = dp[j] + ;
sort(tmp.begin(),tmp.end());
path[i+] = tmp; //同为vector类型,可赋值
par[i+] = j;
}
}
}
printf("%d\n",dp[n]);
int u;
u =n;
for(i=dp[n]-; i>=; i--)
{
out[i] = u;
u= par[u];
}
for(i=; i<dp[n]; i++)
{
for(j=; j<; j++)
{
printf("%d ",path[out[i]][j]);
}
printf("%d\n",path[out[i]][j]);
}
puts("");
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i =; i<n; i++)
{
scanf("%d",&data[i]);
ks[i] = data[i];
}
solve();
}
return ;
}

ZOJ 2702 Unrhymable Rhymes(DP)的更多相关文章

  1. ZOJ 4027 Sequence Swapping(DP)题解

    题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少 思路:DP题,注定想得掉头发. 显然一个左括号( 的最远交换距离由他右边的左括号的最 ...

  2. ZOJ 2702 Unrhymable Rhymes 贪心

    贪心.能凑成一组就算一组 Unrhymable Rhymes Time Limit: 10 Seconds      Memory Limit: 32768 KB      Special Judge ...

  3. ZOJ 2702 Unrhymable Rhymes

    Unrhymable Rhymes Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu De ...

  4. ZOJ 2625 Rearrange Them(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625 题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的 ...

  5. ZOJ 2745 01-K Code(DP)(转)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745 题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’, ...

  6. ZOJ 1013 Great Equipment(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输, ...

  7. ZOJ 3211 Dream City(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3374 题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上 ...

  8. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  9. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

随机推荐

  1. HW2.21

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. HDU4737 - A Bit Fun(线段树)

    题目大意 给你一个数组a,定义f(i,j)=ai|ai+1|ai+2|⋯|aj ,|为or运算,求满足f(i,j)<m的二元组个数,N≤105,m≤230 题解 枚举起点i,然后找出最靠右的k, ...

  3. CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理

    简记: CGAffineTransformMake(a,b,c,d,tx,ty) ad缩放bc旋转tx,ty位移,基础的2D矩阵 公式 x=ax+cy+tx    y=bx+dy+ty 1.矩阵的基本 ...

  4. POJ3009 Curling 2.0

    正式做POJ的第一题,做出来后又看了别人的代码,就又完善了一下,也通过了.参考 http://blog.sina.com.cn/s/blog_4abcd9bc0100phzb.html 改了之后觉得写 ...

  5. Jquery Ajax的时候 老是返回到 error,是因为json格式不正规的原因

    Jquery Ajax的时候 老是返回到 error,是因为json格式不正规的原因: 怪不得不执行,原来我返回的是{success:true,id:1} 这种不规则的字符串,不是严格的json格式, ...

  6. svn无法更新解决方案

    1.删除C:\Documents and Settings\用户名\Application Data\Subversion\auth下的文件,删除svn登录信息. 2.将eclipse中 window ...

  7. "判断this指针是不是null有什么意义呢"

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:"判断this指针是不是null有什么意义呢".

  8. iOS开发 落地消息多的处理办法(仅供参考)

    1.首先要知道一点,你的消息储存是用数据库储存的! 看了一下微信和qq的消息处理,一般情况下第三方(亲加,容云,环信都会有本地的数据库)处理过的! 但是我发现,最近一个需求要求开发@"消息已 ...

  9. Hyper-V避免使用快照

    虽然Hyper-V快照好处多多,但应该尽量少用,有两个原因,首先,如果你创建的是数据库服务器快照,你必须执行回滚,这样数据库往往会招到破坏,其次,创建快照会影响虚拟机的性能,实际上,创建快照就是创建第 ...

  10. 算法基础:最大递减数问题(Golang实现)

    给出一个非负整数,找到这个非负整数中包括的最大递减数.一个数字的递减数是指相邻的数位从大到小排列的数字. 如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为 ...