uva10192 - Vacation(dp,lcs)

本文详细介绍了一种经典的动态规划问题——最长公共子序列(LCS)算法,并提供了完整的实现代码。通过具体实例展示了如何利用二维数组dp来记录两个字符串a和b的最长公共子序列长度,最终求得结果。

最长公共子序列的简单应用。。。

 

状态:dp[i][j]表示串a[0。。。i]和串b[0。。。j]的最长公共子序列【lcs】。

状态转移:dp[i][j] = {if(a[i]==b[j]) dp[i][j] = dp[i-1][j-1]+1;

                                 if(a[i]!=b[j]) dp[i][j] = max(dp[i-1][j],dp[i][j-1]);}

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 105
char a[M], b[M];
int n1, n2, dp[M][M];
int lcm()
{
    n1 = strlen(a); n2 = strlen(b);
    for(int i = 0; i <= n1; i++) dp[i][0] = 0;
    for(int i = 0; i <= n2; i++) dp[0][i] = 0;
    for(int i = 1; i <= n1; i++)
    for(int j = 1; j <= n2; j++)
    {
        if(a[i-1]==b[j-1]) dp[i][j] = dp[i-1][j-1]+1;
        else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
    }
    return dp[n1][n2];
}
int main ()
{
    int cas = 0;
    while(gets(a))
    {
        if(a[0]=='#') break;
        gets(b);
        printf("Case #%d: you can visit at most %d cities.\n",++cas,lcm());
    }
    return 0;
}


<think> 嗯,用户正在询问关于LUT-Only LCs的详细信息。从对话历史来看,用户之前接触过FPGA相关的概念,比如查找表(LUT)和IP核配置,引用内容也涉及Altera(现Intel FPGA)的使用建议和Verilog示例。用户可能是硬件工程师或FPGA学习者,需要深入理解这种特殊逻辑单元的特性。 用户的问题聚焦在"LUT-Only LCs"这个专业术语上,这属于FPGA架构的底层细节。我需要从三个层面解释:基础概念(定义/结构)、与传统LC的区别、应用场景。特别要注意用户提到的引用[1]中"利用正弦波对称性提高内存效率"的线索,这暗示LUT-Only结构对数学函数实现有优势。 技术细节上需要强调:1)LUT-Only省略了寄存器带来的面积优势;2)纯组合逻辑特性;3)资源利用率与布线灵活性的权衡。用户展示的引用[3]的简单门电路代码恰好可以用来说明传统LC的冗余性——当只需要wire连接时,触发器完全浪费了。 考虑到用户可能做资源优化,准备补充一个潜在风险:某些FPGA架构中,LUT-Only单元可能共享配置存储器,过度集中使用可能导致布线冲突。这个点虽然较深,但对实际设计很重要。 相关问题设计成阶梯状:从基础(定义)到应用(时序分析),最后延伸对比其他架构。用户若问到Altera建议(引用[2]),可以展开说明:大型LUT用专用存储器块(如MLAB)比分布式LC更高效,这与LUT-Only的定位不同。 </think> LUT-Only LCs(查找表专用逻辑单元)是FPGA(现场可编程门阵列)架构中的一种特殊逻辑单元类型,专注于高效实现纯组合逻辑功能。其核心特点及与传统逻辑单元(LC)的区别如下: --- ### **LUT-Only LCs 的核心特性** 1. **简化结构** - **仅保留LUT**:省略传统LC中的寄存器(触发器)、进位链和多路复用器等时序/控制部件。 - **纯组合逻辑**:仅支持无记忆功能的组合电路(如布尔运算、数据选择、数学变换),无法实现时序逻辑(如计数器、状态机)。 - 结构示意: ``` 输入信号 → LUT(实现真值表) → 输出信号 ``` 2. **资源与性能优势** - **面积效率**:去除寄存器后,单元物理尺寸显著减小,单位面积内可集成更多逻辑单元。 - **低功耗**:减少时序控制电路,动态功耗降低(适合低功耗场景)。 - **布线灵活性**:简化后的单元更易布局布线,优化关键路径延迟[^1]。 3. **应用场景** - **密集型组合逻辑**:如加密算法(S盒)、数据路径处理(移位/位操作)、数学函数(三角函数、对称性计算[^1])。 - **辅助功能**:作为传统LC的补充,分担纯组合任务,释放带寄存器的LC用于时序逻辑。 --- ### **与传统逻辑单元(LC)的对比** | **特性** | **LUT-Only LC** | **传统LC** | |------------------|-------------------------------|--------------------------------| | **核心组件** | 仅LUT | LUT + 寄存器 + 进位链 + 控制逻辑 | | **逻辑类型** | 纯组合逻辑 | 组合逻辑 + 时序逻辑 | | **面积占用** | 更小(节省~30-50%面积) | 较大 | | **时序支持** | 不支持时钟/寄存器 | 支持同步时序逻辑 | | **适用场景** | 数据流处理、数学运算 | 状态机、计数器、流水线设计 | --- ### **设计考量与限制** 1. **时序约束** - 所有逻辑必须在单周期内完成(无流水线能力),组合路径过长可能限制最大时钟频率。 2. **资源分配策略** - 需与带寄存器的LC协同使用:时序部分用传统LC,密集型计算用LUT-Only LC[^2]。 - 例:在大型LUT设计(如>8位)中,混合使用可优化整体资源利用率[^2]。 3. **厂商实现差异** - **Xilinx**:部分UltraScale+器件支持"LUT-Only Slice"。 - **Intel (Altera)**:Cyclone/Stratix系列通过自适应逻辑模块(ALM)灵活配置LUT模式。 --- ### **应用实例** 1. **对称性计算优化** 在DSP中计算$ \sin/\cos $时,利用LUT-Only LC存储$ [0, \frac{\pi}{2}] $的采样值,通过对称性($ \sin(\pi - \theta) = \sin\theta $)覆盖全周期,减少LUT深度[^1]。 ```verilog // 例:用LUT实现4位对称sin函数 wire [3:0] addr_sym = (phase[2:0] > 3'b100) ? ~phase[2:0] : phase[2:0]; assign sin_value = lut[addr_sym]; // LUT仅存储[0, π/2]范围 ``` 2. **位操作加速** 如CRC校验中的异或链,可通过多级LUT-Only LC并行计算,避免寄存器开销: ```verilog assign crc_out = data_in ^ {crc_reg[30:0], 1'b0} ^ (crc_reg[31] ? 32'h04C11DB7 : 0); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值