正解:记搜+逼近

解题报告:

神仙题预警,,,

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

大概说下思路趴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. 浮点纹理 opengl

    原文地址:http://wangqingyun84.blog.163.com/blog/static/790836172010323113604/ 因为 glsl部分 绑定fbo 看到要用浮点纹理,搜 ...

  2. Mac 下,修改plist文件

    /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName $DISPLAY_NAME" "${PROJECT_TEMP_D ...

  3. 一篇文看懂Hadoop

    我们很荣幸能够见证Hadoop十年从无到有,再到称王.感动于技术的日新月异时,希望通过这篇内容深入解读Hadoop的昨天.今天和明天,憧憬下一个十年. 本文分为技术篇.产业篇.应用篇.展望篇四部分 技 ...

  4. RAC:Oracle11gR2:群集的起、停、状态查询

    一:查看群集的状态 1.0.1 使用crsctl status resource [-t] 1.0.2 使用crs_stat [-t] 1.0.1 使用srvctl status <obj> ...

  5. AssetBundle之LoadFromCacheOrDownload()取代"new WWW (url)的作用

    1.为了充分利用缓存功能.2.缓存的资源包完全由文件名和版本号唯一标识,URL所有域名和路径信息在缓存被忽略.3.由于缓存的资源包通过文件名而不是完整的URL来识别,在任何时候资源包被下载,你可以更改 ...

  6. MathType如何编辑手写体l

    MathType在编辑公式不仅方便而且规范,并且能够根据自己的需要选择不同的字体进行使用,可以是正体也可以是斜体,可以是新罗马体,也可以是花体,这些用word公式编辑器MathType都是可以的.还有 ...

  7. Effective C++ Item 33 Avoid hiding inherited names

    class Base { private: int x; public: ; virtual void mf2(); void mf3(); ... }; class Derived: public ...

  8. Python 入门(一)定义字符串+raw字符串与多行字符串

    定义字符串 前面我们讲解了什么是字符串.字符串可以用''或者""括起来表示. 如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" " ...

  9. sqlmap tutorial

    svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev sqlmap.py -u "http://www.isl ...

  10. MQTT协议笔记之mqtt.io项目Websocket协议支持

    前言 MQTT协议专注于网络.资源受限环境,建立之初不曾考虑WEB环境,倒也正常.虽然如此,但不代表它不适合HTML5环境. HTML5 Websocket是建立在TCP基础上的双通道通信,和TCP通 ...