P2750 贰五语言Two Five USACO5.5 记忆化搜索
正解:记搜+逼近
解题报告:
神仙题预警,,,
我真滴觉得还是挺难的了,,,
大概说下思路趴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 记忆化搜索的更多相关文章
- [洛谷P2750] [USACO5.5]贰五语言Two Five
洛谷题目链接:[USACO5.5]贰五语言Two Five 题目描述 有一种奇怪的语言叫做"贰五语言".它的每个单词都由A-Y这25个字母各一个组成.但是,并不是任何一种排列都是一 ...
- [HNOI2004]L语言 字典树 记忆化搜索
[HNOI2004]L语言 字典树 记忆化搜索 给出\(n\)个字符串作为字典,询问\(m\)个字符串,求每个字符串最远能匹配(字典中的字符串)到的位置 容易想到使用字典树维护字典,然后又发现不能每步 ...
- 集训第五周动态规划 I题 记忆化搜索
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 五语言学习系列 C,C++,Objective-C,Java,C# (一)历史
C:由AT&T贝尔实验室的Dennis Ritchie于1972年创建的,是专为开发者设计的语言. C++:在C基础上,1983年又由贝尔实验室的Bjarne Strou-strup推出了C+ ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- 使用c语言计算分期贷款折算年化收益率(内部收益率IRR*12)
众所周知,现在银行的分期贷款利率是很有诱惑性人.表面看利率是很低的,例如招行的闪电贷有时给我的利率是4.3% 但是,由于贷款是分期还本的,我手上的本金每月都在减少,到最后一个月时手上只有少量本金,但是 ...
- 计算机专业C语言编程学习重点:指针化难为易
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&记忆化递归
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...
- 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 ...
随机推荐
- 弹窗插件zDialog使用教程
1.首先现在好zDialog然后复制项目中 2.配置zDialog解压以后images文件夹位置 images存放位置根据自己实际项目而定,zDialog.js中配置位置即可,如: var IMAGE ...
- Xcode 5.0 编译低版本app
Xcode 5.0 默认的编译环境是iOS7,编译出来的app,安装到iOS7.0版本以上的手机上,会表现出iOS7.0的风格.兼容不太好的应用,布局上可能会因此乱八七糟. 如果还不想让app升级到i ...
- jQuery-理解事件
一.理解事件 1.什么是事件 事件是Web浏览器通知应用程序(比如我们的js)发生了某个事情! 我们可以为这些特定的事情,事先安排好处理方案,这样就能够实现互动! 2.事件目标 你可以简单的理解为事件 ...
- Cookie文件格式解析
原文参考:http://blog.csdn.net/lixianlin/article/details/2738229 1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏 ...
- 关于NaN(Not a Number)的问题
在游戏运行时,代码若写得不安全很容易出现NAN的异常.一旦NAN出现整个游戏不崩溃也坏死掉了,游戏上了则是要被直接打回来的节奏,更是一个开发及测试人员每人都要扣3000块的大BUG. 一般表现为: ...
- mysql通过mysql_install_db初始化数据目录时使用--user选项的作用是什么?
需求描述: mysql数据库通过mysql_install_db初始化数据目录时,使用了--user选项,这里记录下该参数的作用 参数解释: 1.--user的作用:就是以哪个操作系统用户来执行mys ...
- UVa 10450 - World Cup Noise
题目:构造一个01串,使得当中的1不相邻,问长度为n的串有多少中. 分析:数学,递推数列. 设长度为n的串有n个.则有递推关系:f(n)= f(n-1)+ f(n-2): 长度为n的结束可能是0或者1 ...
- python中模块,包,库
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- Android - Style问题
转自:http://jingyan.baidu.com/article/c910274be7536acd361d2dca.html 转自:http://blog.sina.com.cn/s/blog_ ...
- sqlmap tutorial
svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev sqlmap.py -u "http://www.isl ...