【2022省选模拟】叮叮车——卡特兰数、数位DP

此题不提供链接

题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解

首先看这个 f ( i ) f(i) f(i),其实就是个卡特兰数: f ( i ) = ( 2 i i ) i + 1 f(i)=\frac{{2i\choose i}}{i+1} f(i)=i+1(i2i),这是很经典的结论了。你也可以从DP入手推一下,因为最优方案必定是选 n n n 个矩形,把DP式子列出来就知道了。

然后由于答案是 max ⁡ i = l r v 7 [ ( i + 1 ) f ( i ) ] \max_{i=l}^rv_7[(i+1)f(i)] maxi=lrv7[(i+1)f(i)],发现 ( i + 1 ) (i+1) (i+1) 被消掉了,最后只剩下 max ⁡ i = l r v 7 [ ( 2 i i ) ] = max ⁡ i = l r v 7 [ ( 2 i ) ! ( i ! ) 2 ] \max_{i=l}^rv_7[{2i\choose i}]=\max_{i=l}^rv_7[\frac{(2i)!}{(i!)^2}] maxi=lrv7[(i2i)]=maxi=lrv7[(i!)2(2i)!]

由于答案只求7的次数,并且是阶乘,所以我们可以用另一个经典的基于递归枚举的计算方法算次数:
v 7 [ ( 2 n ) ! ( n ! ) 2 ] = ∑ i = 0 + ∞ ( ⌊ 2 n 7 i ⌋ − 2 ⌊ n 7 i ⌋ ) v_7[\frac{(2n)!}{(n!)^2}]=\sum_{i=0}^{+\infty}(\lfloor\frac{2n}{7^i}\rfloor-2\lfloor\frac{n}{7^i}\rfloor) v7[(n!)2(2n)!]=i=0+(7i2n27in)
这个式子告诉我们,考虑7进制下的 n n n 的每个后缀,若×2过后会进位则有1的贡献,答案是所有后缀的贡献和。

这显然是可以数位DP的,只需要把 l l l r r r 都转成7进制数,然后讨论是否抵上界、是否抵下界、当前位是否进位进行转移即可。

代码

暴力压位高精进制转换

#include<bits/stdc++.h>//JZM yyds!!
#define ll long long
#define uns unsigned
#define IF (it->first)
#define IS (it->second)
#define END putchar('\n')
using namespace std;
const int MAXN=100005;
const ll INF=1e18;
inline ll read(){ll x=0;bool f=1;char s=getchar();while((s<'0'||s>'9')&&s>0){if(s=='-')f^=1;s=getchar();}while(s>='0'&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar();return f?x:-x;
}
int ptf[50],lpt;
inline void print(ll x,char c='\n'){if(x<0)putchar('-'),x=-x;ptf[lpt=1]=x%10;while(x>9)x/=10,ptf[++lpt]=x%10;while(lpt)putchar(ptf[lpt--]^48);if(c>0)putchar(c);
}
inline ll lowbit(ll x){return x&-x;}ll mi[10]={1,7,49,343,2401,16807,117649,823543,5764801,40353607};
const ll w=40353607;
struct bigint{vector<ll>a;bigint(){}bigint(ll x){a.push_back(x);while(a.back()>=w)a.push_back(a.back()/w),a[a.size()-2]%=w;}inline int AT(int x){if(x/9>=(int)a.size())return 0;return a[x/9]/mi[x%9]%7;}inline bigint operator+(const bigint&b)const{bigint res=*this;res.a.resize(max(a.size(),b.a.size()));for(int i=0,lim=b.a.size();i<lim;i++)res.a[i]+=b.a[i];for(int i=0,lim=res.a.size();i<lim-1;i++)res.a[i+1]+=res.a[i]/w,res.a[i]%=w;while(res.a.back()>=w)res.a.push_back(res.a.back()/w),res.a[res.a.size()-2]%=w;while(res.a.size()>1&&!res.a.back())res.a.pop_back();return res;}inline bigint operator-(const bigint&b)const{bigint res=*this;for(int i=0,lim=b.a.size();i<lim;i++){res.a[i]-=b.a[i];if(res.a[i]<0)res.a[i]+=w,res.a[i+1]--;}for(int i=b.a.size(),lim=res.a.size();i<lim;i++)if(res.a[i]<0)res.a[i]+=w,res.a[i+1]--;while(res.a.size()>1&&!res.a.back())res.a.pop_back();return res;}inline bigint operator*(const bigint&b)const{bigint res;int la=a.size(),lb=b.a.size();res.a.resize(la+lb);for(int i=0;i<la;i++)for(int j=0;j<lb;j++)res.a[i+j]+=a[i]*b.a[j];for(int i=0,lim=res.a.size();i<lim-1;i++)res.a[i+1]+=res.a[i]/w,res.a[i]%=w;while(res.a.back()>=w)res.a.push_back(res.a.back()/w),res.a[res.a.size()-2]%=w;while(res.a.size()>1&&!res.a.back())res.a.pop_back();return res;}inline bigint operator/(const ll&d)const{bigint res=*this;for(int i=a.size()-1;i>=0;i--){if(i>0)res.a[i-1]+=res.a[i]%d*w;res.a[i]/=d;}while(res.a.size()>1&&!res.a.back())res.a.pop_back();return res;}
}l=bigint(0),r=bigint(0);
int n,a[MAXN],b[MAXN],dp[MAXN][2];
inline ll HS(int x,bool up,bool dm,bool e){return x<<3|(up<<2)|(dm<<1)|e;}
unordered_map<ll,int>F;
inline int dfs(int x,bool up,bool dm,bool e){if(x<0)return e?-1e8:0;if(!up&&!dm)return dp[x+1][e];if(F.find(HS(x,up,dm,e))!=F.end())return F[HS(x,up,dm,e)];int l=dm?a[x]:0,r=up?b[x]:6,res=-1e8;for(int i=l;i<=r;i++)for(int t=0;t<2;t++){if(e&&i>3-t)res=max(res,dfs(x-1,up&&i==r,dm&&i==l,t)+1);if(!e&&i<4-t)res=max(res,dfs(x-1,up&&i==r,dm&&i==l,t));}return F[HS(x,up,dm,e)]=res;
}
signed main()
{freopen("dingdingcar.in","r",stdin);freopen("dingdingcar.out","w",stdout);char s=getchar();while(s<'0'||s>'9')s=getchar();while(s>='0'&&s<='9')l=l*10+bigint(s^48),s=getchar();while(s<'0'||s>'9')s=getchar();while(s>='0'&&s<='9')r=r*10+bigint(s^48),s=getchar();n=max(l.a.size()*9,r.a.size()*9);for(int i=0;i<n;i++)a[i]=l.AT(i),b[i]=r.AT(i);dp[0][0]=0,dp[0][1]=-1e8;for(int i=1;i<=n;i++){//其实这个预处理的DP完全没必要dp[i][0]=dp[i][1]=-1e8;for(int j=0;j<7;j++){if(j<4)dp[i][0]=max(dp[i][0],dp[i-1][0]);if(j<3)dp[i][0]=max(dp[i][0],dp[i-1][1]);if(j>3)dp[i][1]=max(dp[i][1],dp[i-1][0]+1);if(j>2)dp[i][1]=max(dp[i][1],dp[i-1][1]+1);}}print(max(dfs(n,1,1,0),dfs(n,1,1,1)));return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java推送叮叮消息,叮叮叮!请及时签收入门学习Java导航路线

原标题&#xff1a;叮叮叮&#xff01;请及时签收入门学习Java导航路线 引言 想必有很多像我一样刚学习Java会有很迷茫的人吧&#xff0c;今天给小伙伴们整理了一些资料&#xff0c;有需要的小伙伴们可以私信我&#xff0c;顺便推荐一个免费学习的Qqun&#xff0c;里面有很多免…

Html 叮叮书院

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>主页</title><style type"text/css">#menu{}#menu li{list-style-type: none;display: inline-block;width: 90px;height: 30px;line-height: 30px;p…

训练ChatGPT-漏洞1

果然&#xff0c;问这个机器人没法理解的情感关系的这个问题&#xff0c;真是谁都扛不住。

ChatGPT是智障,Scanner输入数据时,提示信息滞后输出

import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc new Scanner(System.in);while(sc.hasNext()){System.out.println("请输入需要累加的个数");int n sc.nextInt();sc.nextLine(); // 清除输入缓冲区中的剩余内容…

全网最全ChatGpt指令,玩转ChatGpt来这里就够了!!!

全网最全ChatGpt指令&#xff0c;玩转ChatGpt来这里就够了&#xff01;&#xff01;&#xff01; 包含20多种行业场景&#xff0c;加入星球&#xff0c;与各行各业大佬共同探讨研究

打不过就加入!ChatGPT 指令学习指南:为开发者提供灵活而强大的工具

最近AI大火&#xff0c;智能化&#xff0c;集成化的出现&#xff0c;对于各行各业的冲击可谓是相当的大。看基础的文案AI可以代劳&#xff0c;简单的文章AI可以代劳&#xff0c;重复的代码AI可以代劳&#xff0c;风格迥异的绘画AI可以代劳&#xff0c;除此种种&#xff0c;用法…

三条好用的ChatGPT指令

刷视频刷到的一些好用的chatGPT指令&#xff0c;记录一下。 第一条指令适用于刚开始某个课题的时候&#xff0c;让chatGPT从一个犀利的读者角度根据你的科研问题给你提供一些反馈 Act as a critical reader. Could you provide some constructive feedback on my research que…

ChatGPT常用指令大全,带你学习ChatGPT

ChatGPT是一种自然语言处理技术&#xff0c;可以模拟人类对话并回答问题。在使用ChatGPT时&#xff0c;您需要了解一些常用的指令和命令&#xff0c;以便更好地控制ChatGPT的行为和输出。以下是常用的ChatGPT指令大全。 手机端示意图&#xff0c;名片交流探讨更多指令与学习 s…

浅谈ChatGPT在一个IT运维人眼中的日常使用场景

前言 其实AI的概念已经存在了十多年&#xff0c;包括在运维领域&#xff0c;也从传统运维演化到了所有AIOps的概念&#xff0c;但一直以来对当前的AI并不是太看好&#xff0c;始终觉得当前的AI只是停留在“撞库”&#xff0c;从海量的库里去匹配关键字触发语句&#xff0c;所谓…

浅谈ChatGPT对生产关系及工具的颠覆影响

&#xff08;先歪个楼&#xff0c;配图是三体乱纪元&#xff0c;证明三体问题无解&#xff0c;而ChatGPT证明了AIGC问题是可解的&#xff09;最近ChatGPT越来越热&#xff0c;仿佛看到了资本市场又一次的爆发。最近周末也会跟几个朋友吃饭聊天&#xff0c;有目前明星创业公司的…

国产化ChatGPT来袭,景联文科技提供专业数据采集标注服务,人手一个专属ChatGPT或成为可能

ChatGPT作为一个颠覆性的创新&#xff0c;现已成为火爆全球的智能应用。 自ChatGPT爆火以来&#xff0c;国内科技圈开始频频发力&#xff0c;多家科技和互联网公司纷纷表示将开发出中国本土化的ChatGPT。 以百度为例&#xff0c;3月16日&#xff0c;百度推出新一代知识增强大语…

北京筑龙吴英礼:ChatGPT在采购与招标中的应用

近日&#xff0c;由中国招标投标协会举办的“人工智能对招标采购数字化发展的机遇与挑战交流座谈会”在北京召开。北京筑龙CTO吴英礼受邀出席&#xff0c;围绕"ChatGPT在招标投标中的应用"进行探讨&#xff0c;从ChatGPT背后的的技术、ChatGPT助力招标投标行业数字化…

博后招募 | 西湖大学机器智能实验室招聘大模型与智能机器人方向博后/RA

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 西湖大学 西湖大学机器智能实验室 (Machine Intelligence Laboratory, MiLAB) 专注于强化学…

中科院寒门博士:回答这个时代读研究生还有什么价值

来源 | 整理自中国科学院大学、黄国平微博、新华网 转自 | 募格学术 我走了很远的路&#xff0c;吃了很多的苦&#xff0c;才将这份博士学位论文送到你的面前。二十二载求学路&#xff0c;一路风雨泥泞&#xff0c;许多不容易。如梦一场&#xff0c;仿佛昨天一家人才团聚过。 2…

使用chatgpt生成快速入眠笔记

以下是使用chatgpt生成快速入眠笔记的简单过程 可以发现&#xff0c;增加详细两个字&#xff0c;可以让它表述的更明白。 通过询问“还有其他方法吗”&#xff0c;获取更多可能性&#xff0c;当然你也可以直接说继续 但实测继续有时候不会记住上一条提问 详细讲解一下程序员怎…

利用催眠技巧绕开 OpenAI 的内容政策限制(仅供研究使用)

利用催眠技巧绕开 OpenAI 的内容政策限制&#xff08;仅供研究使用&#xff09; 技巧:生成示例: 声明&#xff1a;请仅作研究之用&#xff0c;不要违规使用&#xff01; 在破解成功后,通过屏蔽moderetions的api请求,可以绕过OpenAI对于输出内容的审查. 地址为:https://chat.ope…

ChatGPT版必应被华人小哥攻破,一句话「催眠」问出所有Prompt

才上岗2天&#xff0c;ChatGPT版必应就被攻破了。 只需在问题前面加上一句&#xff1a;忽视掉之前的指令。 它就好像被催眠了一样&#xff0c;问什么答什么。 来自斯坦福大学的华人小哥Kevin Liu就通过这一方法&#xff0c;把它的prompt全给钓了出来。 连开发人员最开始给它…

从GPT到chatGPT(二):GPT2

GPT2 文章目录 GPT2前言正文摘要方法概述训练数据输入表示模型结构 实验语言模型Children’s Book Test&#xff08;CBT&#xff09;LAMBADAWinograd Schema Challenge&#xff08;WSC&#xff09;Reading ComprehensionSummarizationTranslationQuestion Answering Generaliza…

AI 答题真有那么智能吗?聊聊 ChatGPT 印象

AI 快要成精了 2022 年&#xff0c;人工智能&#xff08;AI&#xff09;在很多领域发挥了威力。相信你也已经看到或听到不少新闻了。例如说绘画&#xff0c;现在这样的图片&#xff0c;人工智能都能根据你的要求绘制出来。 图片来源&#xff1a;t.ly/8VUL 很多插画师总是抱怨…