首页 > 其他分享 >洛谷题单指南-动态规划2-P3147 [USACO16OPEN] 262144 P

洛谷题单指南-动态规划2-P3147 [USACO16OPEN] 262144 P

时间:2024-05-10 14:56:52浏览次数:29  
标签:P3147 int 洛谷题 最大值 合并 262144 端点 dp

原题链接:https://www.luogu.com.cn/problem/P3147

题意解读:将一组数据两两相邻且相同的合并,合并成一个数值+1的数,求合并后的最大值。

解题思路:

考虑合并后的最大数i,其最后一次必然是由两个i-1合并而来的

设dp[i][j]表示以j为左端点,合并最大值为i时的右端点的下一个位置

如图:

dp[i][j]可以拆解为两部分:

1、从j为左端点,最大合并为i-1的右端点的下一个位置,即dp[i-1][j]

2、从dp[i-1][j]为左端点,最大合并为i-1的右端点的下一个位置,即dp[i-1][dp[i-1][j]]

因此,状态转移为dp[i][j] = dp[i-1][dp[i-1][j]]

初始化:对于每一个数a[i],有dp[a[i]][i] =i+1; //[i ~ i+1)最大可以合成a[i]

取值范围:

i的范围:如果262144个数全是40,最多合并次数是log2(262144),最大值会到40+log2(262144) = 58

j的范围:1~262144

求值:枚举i,j,更新dp[i][j],如果dp[i][j]不为0,则更新答案为i

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 262144;
const int M = 58; //如果262144个数全是40,最多合并次数是log2(262144),最大值会到40+log2(262144) = 58
int n, ans;
int a[N];
int dp[M + 5][N + 5]; //dp[i][j]表示以j为左端点,合并最大值为i时的右端点的下一个位置

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        dp[a[i]][i] = i + 1; //[i ~ i+1)最大可以合成a[i]
    } 
    
    for(int i = 2; i <= M; i++)
    {
        for(int j = 1; j <= N; j++)
        {
            if(!dp[i][j]) dp[i][j] = dp[i-1][dp[i-1][j]];
            if(dp[i][j]) ans = i;
        }
    }
    cout << ans;
    return 0;
}

 

标签:P3147,int,洛谷题,最大值,合并,262144,端点,dp
From: https://www.cnblogs.com/jcwy/p/18184334

相关文章

  • 洛谷题单指南-动态规划2-P4310 绝世好题
    原题链接:https://www.luogu.com.cn/problem/P4310题意解读:求最长的子序列长度,使得每相邻两个元素&操作不为0。解题思路:直观来看,可以通过类似最长上升子序列的算法,进行状态转移,但是复杂度为O(n^2),会超时状态表示:dp[i]表示前i个数能产生满足条件的子序列的最长长度状态转移:dp......
  • 洛谷题单指南-动态规划2-P1833 樱花
    原题链接:https://www.luogu.com.cn/problem/P1833题意解读:在有限的时间内,看n株樱花树,第i株樱花树可以看pi次,看每株樱花树耗费时间ti,看每株樱花树一次美学值ci,求最多能看到多少美学值。解题思路:本题实质是一个混合背包问题(pi>0是多重背包,pi=0是完全背包):背包容量:总时间,可以根据......
  • 洛谷题单指南-动态规划2-P1854 花店橱窗布置
    原题链接:https://www.luogu.com.cn/problem/P1854题意解读:F束花依次放入V个花瓶,每个花瓶最多一朵,且花的顺序在花瓶中递增,计算最大的美学值,并且输出每朵花具体放置方案。解题思路:首先想到的的DFS法,对于每一朵花,枚举所有的摆放方案,累加美学值,并记录放置位置,完成一种方案就记录最......
  • 洛谷题单指南-动态规划2-P1435 [IOI2000] 回文字串
    原题链接:https://www.luogu.com.cn/problem/P1435解题思路:方法1:回文字串的特点是,正着读、反着读是一样的换一个思路,对于一个字符串s,正序、逆序公共的部分就是已经是回文的部分,剩余的部分就是要插入的字符所以,问题转换为,计算一个字符串正序、逆序的最长公共子串,然后剩下的长度......
  • 洛谷题单指南-动态规划2-P1091 [NOIP2004 提高组] 合唱队形
    原题链接:https://www.luogu.com.cn/problem/P1091题意解读:要挑选一个最长的先上升后下降的序列,求其余的元素数量解题思路:先计算正向的最长上升子序列,设f[i]表示以i结尾的正向最长上升子序列再计算逆向的最长上升子序列,设g[i]表示以i结尾的逆向最长上升子序列再枚举所有的i<j,m......
  • 洛谷题单指南-动态规划2-P1004 [NOIP2000 提高组] 方格取数
    原题链接:https://www.luogu.com.cn/problem/P1004题意解读:从起点走到终点,走两次,计算最大路径和,第一次走过的点数值变为0。解题思路:直观上思考,可以先从起点走到终点,计算最大路径和,并记录走过的所有点,然后把所有点的数值置为0,再从起点走到终点,计算最大路径和,把两次的最大路径......
  • 洛谷题单指南-动态规划2-P2679 [NOIP2015 提高组] 子串
    原题链接:https://www.luogu.com.cn/problem/P2679题意解读:在a中按顺序挑选k个子串,使得这些子串连在一起正好和b相等,求方案数。解题思路:这样的题目,无外乎两个思路:DFS暴搜(得部分分)、动态规划动态规划不好想,还是先暴搜吧!1、DFS暴搜搜索的思路就是:从a起始位置开始,一直找到跟b前......
  • 洛谷题单指南-动态规划2-P1439 【模板】最长公共子序列
    原题链接:https://www.luogu.com.cn/problem/P1439题意解读:求最长公共子序列的长度。解题思路:1、O(n^2)的方法:动态规划设两个排列为a,b设dp[i][j]表示a[1~i]与b[1~j]的最长公共子序列长度根据公共子序列结尾是否包含a[i]、b[j]是否相等分情况讨论:如果a[i]==b[j]  则结尾......
  • 洛谷题解-官方题单-递归与递推
    P1255数楼梯原题链接题目描述楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编一个程序,计算共有多少种不同的走法。对于60%的数据,N≤50;对于100%的数据,1≤N≤5000。思路:每次有2种方法上楼梯,要么上一阶,要么上二阶。第一种:得50分的做法是可以用递归来解:点击查看代码......
  • 洛谷题单指南-动态规划2-P2758 编辑距离
    原题链接:https://www.luogu.com.cn/problem/P2758题意解读:对a字符串最少操作几次可以变成b字符串,看似无从下手,可以从内部递推关系着手。解题思路:设dp[i][j]表示将a字符串1~i变成b字符串1~j的最少操作次数,字符串下标从1开始。如何思考递推?可以从最后一步为切入点!最后一步对a[i]......