题目链接: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. Docker系列(四)Dockerfile

    基本语法 使用 #来注释 FROM 指令告诉Docker使用哪个镜像作为基础 接着是维护者信息 RUN 开头的指令会在创建中运行,比如安装软件包 FROM 格式: FROM<image>或 ...

  2. HW5.16

    public class Solution { public static void main(String[] args) { for(int i = 2000; i <= 2010; i++ ...

  3. UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)

     Meta-Loopless Sorts  Background Sorting holds an important place in computer science. Analyzing and ...

  4. 验证(Verification)与确认(Validation)的差别

    验证(Verification)与确认(Validation)的差别 说法一: (2)“验证(Verification)”的涵义 通过提供客观证据对规定要求已得到满足的认定. (2)“确认(Valid ...

  5. mysql优化之查询优化

    Posted by Money Talks on 2012/02/24 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四片 查询优化第五篇 到实战中去 查询优化 查询优化涉及到用户查询数据时使用到 ...

  6. phpcms 源码分析四: 数据库类实现

    这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHP ...

  7. 由 Windows 向 Linux 迁移字体 和 Linux 等宽字体

    1. From Windows Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windows下可用的字体.2. To Linux linux的字体库是 /usr/sha ...

  8. I18N 国际编码

    <%@ page language="java" import="java.util.*, cn.hncu.domain.*" pageEncoding= ...

  9. Android_Intent_passObject

    方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象需要考虑对Person对象进行序列化 MainActivity: package com.example.day06_acti ...

  10. order by跟group by 跟having(2)