博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT 1045 Favorite Color Stripe
阅读量:5282 次
发布时间:2019-06-14

本文共 1486 字,大约阅读时间需要 4 分钟。

使用DP,递推关系见代码,先使用大空间的dp数组

#include 
#include
#include
using namespace std;int max(int a, int b) {
return a>b?a:b;}int main() { int N, M, L, tmp; scanf("%d", &N); scanf("%d", &M); if (M < 1) return 0; vector
MColors(M); for (int i=0; i
LColors(L); for (int i=0; i
=0; i--) { int base = i * cols; for (int j=cols - 2; j>=0; j--) { int mc = MColors[j]; int lc = LColors[i]; if (mc == lc) { dp[base + j] = dp[base + j + cols] + 1; } else { dp[base + j] = max(dp[base + j + 1], dp[base + j + cols]); } } } printf("%d\n", dp[0]); return 0;}

因为递推中只使用了当前行和下一行中的数据,题目又不要求给出完整解,因而可以优化空间如下:

#include 
#include
#include
using namespace std;int max(int a, int b) {
return a>b?a:b;}int main() { int N, M, L, tmp; scanf("%d", &N); scanf("%d", &M); if (M < 1) return 0; vector
MColors(M); for (int i=0; i
LColors(L); for (int i=0; i
curr_row(cols, 0); vector
next_row(cols, 0); for (int i = L-1; i >=0; i--) { for (int j = M - 1; j>=0; j--) { if (MColors[j] == LColors[i]) { curr_row[j] = next_row[j] + 1; } else { curr_row[j] = max(next_row[j], curr_row[j + 1]); } } swap(curr_row, next_row); } printf("%d\n", next_row[0]); return 0;}

即使用两个数组curr_row, next_row交替模拟整个dp数组

 

转载于:https://www.cnblogs.com/lailailai/p/4085762.html

你可能感兴趣的文章
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
梦断代码读后感01
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>
博客园博客插入公式
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>
(五十四)涂鸦的实现和截图的保存
查看>>
配置EditPlus使其可以编译运行java程序
查看>>
java中的占位符\t\n\r\f
查看>>
7.14
查看>>
SDN2017 第一次作业
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
SRS源码——Listener
查看>>
Java面向对象抽象类案例分析
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>