ZOJ 2702 Unrhymable Rhymes(DP)
题目链接: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)的更多相关文章
- ZOJ 4027 Sequence Swapping(DP)题解
题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少 思路:DP题,注定想得掉头发. 显然一个左括号( 的最远交换距离由他右边的左括号的最 ...
- ZOJ 2702 Unrhymable Rhymes 贪心
贪心.能凑成一组就算一组 Unrhymable Rhymes Time Limit: 10 Seconds Memory Limit: 32768 KB Special Judge ...
- ZOJ 2702 Unrhymable Rhymes
Unrhymable Rhymes Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu De ...
- ZOJ 2625 Rearrange Them(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625 题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的 ...
- ZOJ 2745 01-K Code(DP)(转)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745 题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’, ...
- ZOJ 1013 Great Equipment(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输, ...
- ZOJ 3211 Dream City(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3374 题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
随机推荐
- C#调用VC DLL堆栈不对称
今天在调程序时,C#调用VC 编译的dll出现堆栈不对称,查了一下资料,转载在这里供大家参考. 问题描述:对 PInvoke 函数“xxFunction()”的调用导致堆栈不对称.原因可能是托管的 P ...
- HW2.7
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- CF_216_Div_2
比赛链接:http://codeforces.com/contest/369 369C - Valera and Elections: 这是一个树上问题,用深搜,最开始贪心想得是只加叶子节点,找到一个 ...
- List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络
当用foreach遍历Collection时,如果对Collection有Add或者Remove操作时,会发生以下运行时错误: "Collection was modified; enume ...
- centos svn快速搭建
搭建SVN服务,有效的管理代码,以下三步可以快速搞定. 1.安装 #yum install subversion 判断是否安装成功 [root@]# svnserve --version 有了SVN软 ...
- JBOSS实现RMI时注意的问题
使用JBOSS部署EJB服务后通过RMI访问报错: javax.naming.CommunicationException: Could not obtain connection to any of ...
- SimpleDateFormat 转化毫秒到日期时,指定特定的时区
http://blog.csdn.net/wangpeng047/article/details/8560690 影响TimeZone的因素: 1. 操作系统的时区设置. 2. 数据传输时时区设置. ...
- os4开始CLLocationManager类中不支持locationServicesEnabled属性了
locationServicesEnabled改为类方法 //判断定位服务是否开启 if ([CLLocationManager locationServicesEnabled]) { }
- SpringMVC请求分发的简单实现
简介 以前用了下SpringMVC感觉挺不错了,前段事件也简单了写了一些代码来实现了SpringMVC简单的请求分发功能,实现的主要思想如下: 将处理请求的类在系统启动的时候加载起来,相当于S ...
- HashMap早知道
第一眼hashmap始终Collection那个地点 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGxmMTIzMzIx/font/5a6L5L2T/f ...