Poj  AcWing

Description

Sol

这题很数位$DP$啊, 预处理$+$试填法

$F[i][j][k]$表示用$i$块长度不同的木板,当前木板(第$i$块)在这$i$块木板中从小到大排在第$j$位,构成栅栏的方案数.$k=0$表示处于低位,$k=1$表示处于高位.

$F[i][j][0]=\sum_{p=j}^{i-1}$

$F[i][j][1]=\sum_{p=1}^{j-1}$

然后这里有一个地方想了挺久的最终在$gql$的$blog$里找到了答案(怎样才能和$gql$一样神仙啊???),就是为什么$F[i][j][0]$的转移方程里$p$从$j$开始而不是$j+1$.这要看它的相对性$qwq$,因为现在第$i$块木板排第$j$,但是前$i-1$块木板里没有当前排第$j$的木板,也就是当前$(j+1,i)$的木板在$i-1$的情况下都会跌一名 : ))

预处理完之后就是"试填法"了!

外层枚举长度(种数)$i$,内层枚举第$i$块木板的长度.要记录第$i$块木板在前$i$块木板里的排名,然后累计当前选择下的栅栏总数,判断当前选择是否正确不是就继续循环下一个.....具体看代码叭.(代码是以前写的,变量名和上面所写的不太一样$OvO$)

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#define Rg register
#define il inline
#define db double
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a));
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
#define yes(i,a,b) for(Rg int i=a;i>=b;i--)
using namespace std;
const int N=;
int n,ans[N];
ll c,a[N][N][];
bool fl[N];
il void init()
{
a[][][]=a[][][]=;
go(len,,)
go(i,,len)
{
go(j,i,len-)a[len][i][]+=a[len-][j][];
go(j,,i-)a[len][i][]+=a[len-][j][];
}
}
il void solve()
{
mem(fl,);ll cnt=;
go(len,,n)
{
int nm=;
go(i,,n)
{
ll lc=cnt;
if(fl[i])continue;
nm++;
if(len==)cnt+=a[n][nm][]+a[n][nm][];
else
{
if(i>ans[len-]&&(ans[len-]<ans[len-]||len<=))cnt+=a[n-len+][nm][];
if(i<ans[len-]&&(ans[len-]>ans[len-]||len<=))cnt+=a[n-len+][nm][];
}
if(cnt<c)continue;
fl[i]=;ans[len]=i;cnt=lc;break;
}
}
go(i,,n)printf("%d ",ans[i]);printf("\n");
}
int main()
{
int T;scanf("%d",&T);
init();
while(T--){scanf("%d%lld",&n,&c);solve();}
return ;
}

随机推荐

  1. Navicat连接MySQL8.0版本时 建议升级连接客户端这个提示怎么办

    开始->mysql 8.0 command line client ->执行下面的命令//开启mysql服务mysql.server start//进入mysqlmysql -u root ...

  2. 05Redis入门指南笔记(持久化)

    Redis的强劲性能很大程度上是由于将所有数据都存储在了内存中,然而当Redis重启后,所有存储在内存中的数据就会丢失.在一些情况下,希望Redis能将数据从内存中以某种形式同步到硬盘中,使得重启后可 ...

  3. E. Remainder Problem 分块

    两个操作 1对x位置的a[x]+y 2对所有i=y(mod x)求a[i]的和 我们肯定不能n^2 跑,稳超时,但是我们可以这样分块考虑. 为什么n^2不行?因为在x比较小的时候,这个求和操作次数太多 ...

  4. HTML静态网页--表单验证和事件

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  5. hihocoder 1272 买零食

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

  6. H3C 配置RIP peer

  7. 如何查看linux中的ssh端口开启状态

    netstat -anp |grep 22 netstat -anp |grep sshlsof -i :22

  8. thinkcmf,thinksns,thinkphp,onethink三者是什么关系?

    thinksns 是基于tp的老版本二开的 thinkcmf 是网友基于tp开发的cmf thinkphp 是顶想的框架 onethink 是顶想基于tp开发的cmf 官方目前只有ThinkPHP和O ...

  9. P1088 上台阶

    题目描述 楼梯有 \(n(1 \le n \le 50)\) 阶台阶,上楼时可以一步上 \(1\) 阶,也可以一步上 \(2\) 阶,也可以一步上 \(3\) 阶,编程计算共有多少种不同的走法. 输入 ...

  10. 深度学习——CNN

    整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 思想 filter尺寸 ...