正解:记搜+逼近

解题报告:

神仙题预警,,,

我真滴觉得还是挺难的了,,,

大概说下思路趴QAQ

首先我们要知道逼近法是什么!

逼近法,有点像二分的思路,以这题为例举个eg

假如它给了个数字k.我们现在要求b是在(1,2)还是在(2,1)

显然所有b在(1,2)时候的字符串都在(2,1)的前边,且中间没有其他可能排列了

辣我们就先把b放在(1,2)算出这时候的方案数是多少

如果这时候方案数>k,说明b就是在(1,2)

否则在(2,1)

欧克get了趴?

然后知道这个之后,就,说下怎么求方案数呢?

这里我们要用到,轮廓线

显然当我们从小到大填的时候,如果在某一格填入了一个数,它的左上一定都填完了,所以可以发现它形成的轮廓线一定长度递减

然后我们可以用dp递推一下(也可以说是用记搜,,,但我一直jio得记搜属于dp鸭?

大力转移一波就可以得到方案数辣!

overr!

很妙啊我真的觉得!

所以代码大概是下午写QwQ

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rp(i,x,y) for(register ll i=x;i<=y;++i) ll f[][][][][],s[],ans;//si:第i个位置的字母是什么
bool qd[];//qdi:第i个字母确定了没有 inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline bool check(ll lt,ll wz){return (!s[wz] || lt==s[wz]);}
ll dfs(ll a,ll b,ll c,ll d,ll e)
{
ll lt=a+b+c+d+e+; //lt:在确定哪个
if(lt>) return ;if(f[a][b][c][d][e]!=)return f[a][b][c][d][e];
if(a< && check(lt,a+))f[a][b][c][d][e]+=dfs(a+,b,c,d,e);
if(b<a && check(lt,b+))f[a][b][c][d][e]+=dfs(a,b+,c,d,e);
if(c<b && check(lt,c+))f[a][b][c][d][e]+=dfs(a,b,c+,d,e);
if(d<c && check(lt,d+))f[a][b][c][d][e]+=dfs(a,b,c,d+,e);
if(e<d && check(lt,e+))f[a][b][c][d][e]+=dfs(a,b,c,d,e+);
return f[a][b][c][d][e];
}
void wk1(ll num)
{
rp(i,,)
{
for(s[i]=;;++s[i])
{
if(qd[s[i]])continue;qd[s[i]]=;memset(f,,sizeof(f));
int tmp=dfs(,,,,);if(ans+tmp>=num)break;ans+=tmp;qd[s[i]]=;
}
}
rp(i,,)cout<<char(s[i]+'A'-);
} void wk2()
{
string str;cin>>str;
ans=;
rp(i,,)
{
for(s[i+]=;s[i+]<=str[i]-'A';s[i+]++)
{
if(qd[s[i+]])continue;qd[s[i+]]=;memset(f,,sizeof(f));
ans+=dfs(,,,,);qd[s[i+]]=;
}
}
cout<<ans+<<endl;
} int main ()
{
char opt;cin>>opt;
if(opt=='N')wk1(read());
else wk2();
return ;
}

然后代码在这里QAQ

P2750 贰五语言Two Five USACO5.5 记忆化搜索的更多相关文章

  1. [洛谷P2750] [USACO5.5]贰五语言Two Five

    洛谷题目链接:[USACO5.5]贰五语言Two Five 题目描述 有一种奇怪的语言叫做"贰五语言".它的每个单词都由A-Y这25个字母各一个组成.但是,并不是任何一种排列都是一 ...

  2. [HNOI2004]L语言 字典树 记忆化搜索

    [HNOI2004]L语言 字典树 记忆化搜索 给出\(n\)个字符串作为字典,询问\(m\)个字符串,求每个字符串最远能匹配(字典中的字符串)到的位置 容易想到使用字典树维护字典,然后又发现不能每步 ...

  3. 集训第五周动态规划 I题 记忆化搜索

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  4. 五语言学习系列 C,C++,Objective-C,Java,C# (一)历史

    C:由AT&T贝尔实验室的Dennis Ritchie于1972年创建的,是专为开发者设计的语言. C++:在C基础上,1983年又由贝尔实验室的Bjarne Strou-strup推出了C+ ...

  5. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  6. 使用c语言计算分期贷款折算年化收益率(内部收益率IRR*12)

    众所周知,现在银行的分期贷款利率是很有诱惑性人.表面看利率是很低的,例如招行的闪电贷有时给我的利率是4.3% 但是,由于贷款是分期还本的,我手上的本金每月都在减少,到最后一个月时手上只有少量本金,但是 ...

  7. 计算机专业C语言编程学习重点:指针化难为易

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  8. 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&amp;记忆化递归

    HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...

  9. Contest1874 - noip基础知识五:动态规划(背包、树dp、记忆化、递推、区间、序列dp、dp优化)

    传送门 T1  dp[n][m]=dp[n-1][m-1]+dp[n-m][m] T2  ans=cat(n)*(n!)2  卡特兰数 T3  dp[i][j]=sigma(dp[i-1][j-a[i ...

随机推荐

  1. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)

    1. Java代码实现思路 BufferedWriter writefile = new BufferedWriter(new FileWriter(file));  writefile.write( ...

  2. LoadRunner 调用dll方法

    本文主要介绍简单DLL的编写方法及在LoadRunner中局部调用与全局调用DLL方法. 1.动态链接库的编写 在Visual C++6.0开发环境下,打开FileNewProject选项,可以选择W ...

  3. UGUI 的多分辨率适配

    1.Canvas的属性配置 2.Canvas Scaler的属性配置 3.根据不同的屏幕的比例动态修改缩放基准 void Start () { float standard_width = 960f; ...

  4. Blender之OBJ转json

    要想从 Blender 中导出 Three. 模型, 我们首先要将 Tbree.js 导出器添加到Blender 中. 你可以从www.blender.org 上下载 Blender,然后按照相应平台 ...

  5. Spark Streaming源码分析 – Checkpoint

    PersistenceStreaming没有做特别的事情,DStream最终还是以其中的每个RDD作为job进行调度的,所以persistence就以RDD为单位按照原先Spark的方式去做就可以了, ...

  6. C#------各种数据库连接字符串编写

    转载: https://www.connectionstrings.com/

  7. Messages: No result defined for action cn.itcast.oa.test.TestAction and result SUCCESS

    Struts Problem Report Struts has detected an unhandled exception: Messages: No result defined for ac ...

  8. 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第三课)

    第二课名称是:Objective-C 回顾上节课的内容: 创建了单个MVC模式的项目 显示项目的各个文件,显示或隐藏导航,Assistant Editor, Console, Object Libra ...

  9. YARN应用程序开发和设计流程

    从业务的角度看,一个应用需要分两部分进行开发,一个是接入YARN平台,实现3个协议,通过YARN实现对集群资源的访问和利用:另一个是业务功能的实现,这个与YARN本身没有太大关系.下面主要阐述如何将一 ...

  10. nutch爬取时Exception in thread “main” java.io.IOException: Job failed!

    用cygwin运行nutch 1.2爬取提示IOException: $ bin/nutch crawl urls -dir crawl -depth 3 -topN 10 crawl started ...