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. oracle函数 LTRIM(c1,[,c2])

    [功能]删除左边出现的字符串 [参数]C1 字符串 c2 追加字符串,默认为空格 [返回]字符型 [示例] SQL> select LTRIM('   gao qian jing',' ') t ...

  2. HZOJ 那一天我们许下约定

    比较好想的一道题,只是那个组合数比较恶心. 先说一下我最开始想的$n^4$的沙雕dp: 设f[i][j][k]为前i天给了j个,第i天给了k个,则f[i][j][k]=∑f[i-1][j-k][o]; ...

  3. ORACLE SQL数据类型转换

    ORACLE SQL数据类型转换 2019-04-07 22:35:53 广小白 阅读数 429更多 分类专栏: Oracle   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议, ...

  4. Laravel 中 validation 验证 返回中文提示 全局设置

    <?php return [ /* |-------------------------------------------------------------------------- | V ...

  5. element-ui css 文件加载 失败(https://unpkg.com/element-ui/lib/theme-chalk/index.css,加载失败)

    在main.js文件引入   import Vue from 'vue'; import Element from 'element-ui'; import 'element-ui/lib/theme ...

  6. 不需内测账号,带你体验微信小程序完整开发过程

    不需内测账号,带你体验微信小程序完整开发过程 2016年09月24日 - 作者: SwiftCafe 微信小程序还没正式发布就已经迅速成为大家讨论的焦点,那么大家可能觉得只有收到内测邀请才能体验小程序 ...

  7. TabHost选项卡的实现(一):使用TabActivity实现

    一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...

  8. 最小生成树kruskal算法、

    克鲁斯卡尔(kruskal) //kruskal算法生成最小生成树. //对边集数组Edge结构的定义 typedef struct { int begin; int end; int weight; ...

  9. Python--day65--模板语言之tags

    Tags for循环 普通for循环 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% en ...

  10. 3-7 彻底搞清楚unicode和utf8编码