hud动态规划练习2

本文介绍了6个动态规划问题的解决思路,包括1505 City Game中利用dp压缩和循环递归避免暴力计算,2602 Bone Collector的0-1背包问题,1087 Super Jumping!的跳跃问题,1159 Common Subsequence的变式编辑距离,1257最少拦截系统的导弹路径规划,以及1069 Monkey and Banana的猴子取香蕉的dp应用。每个问题都结合了不同的策略和思维方法。
摘要由CSDN通过智能技术生成

1、1505 City Game
171MS 5996K
dp压缩的思想和左边数组和右边数组(求的时候使用循环递归的思想,不要暴力)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<string>
#define MAXNUM 1020
using namespace std;
int M, N, sum[MAXNUM][MAXNUM], l[MAXNUM], r[MAXNUM];
int main()
{
    freopen("1.txt", "r", stdin);
    int i, j, t, k, a, b, cases, ans, tmp;
    char c;
    scanf("%d", &cases);
    while (cases > 0)
    {
        memset(sum, 0, sizeof(sum));
        scanf("%d%d", &M, &N);
        for (i = 1; i <= M; i++)
        {
            for (j = 1; j <= N; j++)
            {
                cin >> c;
                if (c == 'R')
                    sum[i][j] = 0;
                else
                    sum[i][j] = sum[i][j - 1] + 1;
            }
        }
        ans = 0;
        for (i = 1; i <= N; i++)
        {
            l[1] = 1;
            r[M] = M;
            for (j = 2; j <= M; j++)
            {
                l[j] = j;
                while (l[j]>1&&sum[j][i] <= sum[l[j] - 1][i])
                    l[j] = l[l[j] - 1];

            }
            for (j = M - 1; j >= 1; j--)
            {
                r[j] = j;
                while (r[j]<M&&sum[j][i] <= sum[r[j] + 1][i])
                    r[j] = r[r[j] + 1];

            }
            for (j = 1; j <= M; j++)
            {
                if (sum[j][i])
                {
                    tmp = (r[j] - l[j
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值