51nod 1720 祖玛
吉诺斯在手机上玩祖玛的游戏。在这个游戏中,刚开始有n个石头排成一排,第i个石头的颜色是ci。游戏的目标是尽可能快的把所有石头都消掉。
每一秒钟,吉诺斯可以选择一段连续的子段,并且这个子段是回文,然后把它消去,剩下的石头会向中间靠近,把之前消去的石头的空隙补上。按照这样的规则,最少要几次把n个石头都消去。
样例解释:
先把4 4消去,然后把1 2 3 2 1一起消去。
收起
输入
单组测试数据。
第一行输入一个整数 n (1≤n≤500) ,表示石头的数目。
第二行有n个整数,第i个数字表示ci (1≤ci≤n) 。
输出
输出一行,表示答案。
输入样例
7
1 4 4 2 3 2 1
输出样例
2 区间dp。对于一个区间[l,r],选择次数最小的情况可以选定一个k,用dp[l][k]+dp[k][r]来更新,如果s[l]==s[r]那么dp[l+1][r-1]也要参与更新。 代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int s[];
int dp[][];
int get(int l,int r) {
if(l > r) return ;
if(dp[l][r]) return dp[l][r];
dp[l][r] = inf;
for(int i = l;i < r;i ++) {
dp[l][r] = min(dp[l][r],get(l,i) + get(i + ,r));
}
if(s[l] == s[r]) dp[l][r] = min(dp[l][r],get(l + ,r - ));
return dp[l][r];
}
int main() {
int n;
scanf("%d",&n);
for(int i = ;i < n;i ++) {
scanf("%d",&s[i]);
dp[i][i] = ;
}
printf("%d",get(,n - ));
return ;
}
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int s[];
int dp[][]; int main() {
int n;
scanf("%d",&n);
for(int i = ;i < n;i ++) {
scanf("%d",&s[i]);
dp[i][i] = ;
if(i) dp[i - ][i] = - (s[i] == s[i - ]);
}
for(int i = ;i < n;i ++) {
for(int j = ;j + i < n;j ++) {
int d = j + i;
dp[j][d] = ((s[j] == s[d]) ? dp[j + ][d - ] : i + );
for(int k = j;k < d;k ++) {
dp[j][d] = min(dp[j][d],dp[j][k] + dp[k + ][d]);
}
}
}
printf("%d",dp[][n - ]);
return ;
}
51nod 1720 祖玛的更多相关文章
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
- 【51Nod 1674】【算法马拉松 19A】区间的价值 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...
- 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...
随机推荐
- pymysql DAO简单封装
#!/usr/bin/env python # -*-coding:utf-8 -*- # # 无法执行多个query,self.conn.close()放在CdbConn类的单独函数中,每次quer ...
- SpringBoot系列教程JPA之基础环境搭建
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernat ...
- 【LeetCode】两数之和【优化查询过程即可】
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- [转帖]Linux 下软链接和硬链接的区别
Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...
- (idea maven)mybatis-generator步骤
1.新建一个maven项目,选择maven-archetype-webapp 点击next 2.项目名称,点击next 3.选择项目存放路径,然后点击finish 4.在main包下 添加包java和 ...
- springboot2.1.8使用poi导出数据生成excel(.xlsx)文件
前言:在实际开发中经常需要将数据库的数据导出成excel文件,poi方式则是其中一种较为常用的导出框架.简单读取excel文件在之前的一篇有说明 本项目实现需求:user发出一个导出student信息 ...
- (一)线性表(linear list)
文章目录 定义 特点 ADT (abstract data type) 定义 摘抄自 维基百科 线性表(英语:Linear List)是由 n(n≥0)个 数据元素(结点)a[0],a[1],a[2] ...
- Java开发笔记(一百一十三)HttpClient实现下载与上传
前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...
- pt-archiver 归档历史数据及参数详解
目录 1. 背景 2. 操作步骤 2.1. 确认数据归档条件,此次操作开发按照非主键列 server_time 按时间进行删除并保存,需要转化为主键列条件. 2.2. 由于历史表文件较大,按月归档.删 ...
- 【LEETCODE】38、167题,Two Sum II - Input array is sorted
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...