首页 > 其他分享 >uvalive 3363(区间dp)

uvalive 3363(区间dp)

时间:2023-06-28 23:02:24浏览次数:44  
标签:num int len 3363 ++ uvalive return hehe dp


题意:给出一个字符串,问最多能缩减到多短。缩减方式比如:
aaaaabbbb -> 5(a)4(b)
nowletsgogogoletsgogogo -> now2(lets3(go))
题解:区间dp,f[l][r]表示从l到r最多缩减到的长度。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 205;
char s[N];
int f[N][N], hehe[N][N];

bool judge(int st, int num, int len) {
    for (int i = st; i < st + len; i++)
        for (int j = 1; j < num; j++) {
            if (s[i] != s[i + j * len])
                return false;
        }
    return true;
}

int Count(int num) {
    int cnt = 0;
    while (num) {
        num /= 10;
        cnt++;
    }
    return cnt;
}

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%s", s);
        int len = strlen(s);
        for (int i = 0; i < len; i++)
            for (int j = 0; j < len; j++) {
                hehe[i][j] = f[i][j] = j - i + 1;
            }
        for (int i = 2; i <= len; i++) { //length
            for (int j = 0; j + i - 1 < len; j++) { //start
                int l = i / 2;
                for (int k = 1; k <= l; k++) {
                    if (i % k)
                        continue;
                    if (judge(j, i / k, k)) {
                        if (f[j][j + i - 1] > Count(i / k) + 2 + k) {
                            f[j][j + i - 1] = Count(i / k) + 2 + k;
                            hehe[j][j + i - 1] = k;
                        }
                        break;
                    }
                }
            }
        }
        for (int i = 1; i < len; i++)
            for (int j = 0; j + i < len; j++) {
                if (f[j][j + i] == i + 1) {
                    for (int k = j; k < j + i; k++)
                        f[j][j + i] = min(f[j][k] + f[k + 1][j + i], f[j][j + i]);
                }
                else {
                    int l = hehe[j][j + i], temp = f[j][j + i];
                    for (int k = 1; k < l; k++)
                        for (int m = j; m + k < j + l; m++)
                            if (f[m][m + k] != k + 1)
                                f[j][j + i] = min(f[j][j + i], temp - (k + 1 - f[m][m + k]));
                }
            }
        printf("%d\n", f[0][len - 1]);
    }
    return 0;
}


标签:num,int,len,3363,++,uvalive,return,hehe,dp
From: https://blog.51cto.com/u_10729926/6577231

相关文章

  • uva 1407(树形dp)
    题意:有一个机器人从一个节点进入一棵树,给出n个节点之间的距离,如果机器人的能量为x,也就是最多走x,且机器人不需要回到起点,问机器人最多能走多少个节点。题解:f[i][j][0]:遍历子树i的j个节点且最后不需要回到子树的根节点i最少用多少能量f[i][j][1]:遍历子树i的j个节点且最后回......
  • uva 1474(dp)
    题意:有n个队伍修路,有m个避难所,编号从1开始,给出了每个队伍和避难所的位置,每个队伍和避难所之间的距离是|a[i]-b[j]|,如果为每一个队伍分配避难所,且每个避难所至少被分配一个队伍,问每个队伍和自己的避难所之间最短距离和是多少,给出每个队伍分配的避难所编号。题解:dp的状态很好找,因......
  • Linux 中的 dpkg 命令及示例
    Linux因其稳定性、安全性和灵活性而成为世界上使用最广泛的操作系统之一。Linux操作系统的关键组件之一是包管理系统。正在使用不同的包管理系统,但最流行的系统之一是dpkg系统。在本文中,我们将探讨Linux中的dpkg命令、它的作用以及如何有效地使用它。我还将提供一些示例来......
  • 浅谈单调队列优化DP
    对于形如\[f_i=\max(f_{L≤j≤R}+w_i)\]的状态转移方程,也就是转移来自之前某个定长区间的最值,我们可以使用单调队列来维护区间最值,从而优化时间复杂度。烽火传递我们看到题目可以想到用\(f_i\)表示考虑到\(i\)这个烽火台,点第\(i\)个的合法方案中的最小代价那么可以想到......
  • docker报错:Error response from daemon: driver failed programming external connect
    重启docker-compose时,nginx服务报错。报错信息:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointlikeshop-nginx(f0a809481f5016e6f7ca6e1ed826b0676d5523b15f2954a2d22c03c12a89567d):Bindfor0.0.0.0:80failed:portisalr......
  • PACM Team (牛客多校) (DP 01背包, 维度较多)
    题目大意:给出n个物品,物品有4个空间值,然后有一个权值问在不超过最大的空间值时,最大的权值  思路:一开始想了很多其他思路没有想出来开始广搜算法,发现dp可以解决(注意看数据范围,是满足的)遇到奇怪的题,就试试dp,特别在数据范围很小的时候 ......
  • 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟
    强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解1.核心词汇深度确定性策略梯度(deepdeterministicpolicygradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,......
  • 强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定
    强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战1、定义算法1.1定义模型!pipuninstall-yparl!pipinstallparlimportparlimportpaddleimportpaddle.nnasnnimportpaddle.nn.functionalasFcl......
  • Dual Path Network(DPN)
    论文地址:https://arxiv.org/pdf/1707.01629.pdf模型及代码:github.com/cypw/DPNs本文认为:1)ResNet通过这种跨层参数共享和保留中间特征的方式,特征re-use,ResNet将输出与输入相加,形成一个残差结构,可以有效的降低特征上冗余度,重复利用已有特征,但缺点在于难以利用高层信息再发掘底层特......
  • 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟
    强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解1.核心词汇深度确定性策略梯度(deepdeterministicpolicygradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,可......