POJ1037A decorative fence(好dp)
带点组合的东西吧
黑书P257 其实我没看懂它写的嘛玩意儿
这题还是挺不错的 一个模糊的思路可能会好想一些 就是大体的递推方程 dp1[][]表示降序 dp2[][]表示升序 数组的含义为长度为i的第一个数为j且相对第一个数为升或降的排列数 当然j肯定要小于等于i的
dp1[i][j] = dp1[i][j]+dp2[i-1][k](k》=1&&k<j)
同理 dp2[i][j] = dp2[i][j]+dp1[i-1][k](k>=j&&k<i) 这里是因为dp2[i][j]中的j取不到i(因为后面还要升,就肯定取不到i);
这样任务完成了一半了 一定要深刻理解两个dp数组的含义 不然后半部分没法做
对于确定每一位的长度值 需要一步步的确定 先确定第一位的值 那就是挨个减dp1[n][1]dp2[n][1]..减到小于0时就确定了第一位的值 标记上 同时也确定了整体是升序还是降序 抛开第一位 同样的方式去确定第二位 这里要想清楚一点 因为dp数组里对于长度为i的j都不会大于i 你要找的那个数并不是dp里面的j而是相对第j个没有被标记的数 当然如果是升序 还得大于前一个数 降序还得小于前一个数
不知道为嘛一直TLE 在循环内随便加了个break条件就A了 好神奇~
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#include<vector>
#define LL __int64
using namespace std;
LL dp1[][],dp2[][];
int pa[];
bool f[];
int judge(int x)
{
int i,t=;
for(i = ; i <= ; i++)
{
if(!f[i]) t++;
if(t==x)
{
f[i] = ;
return i;
}
}
}
int main()
{
int i,j,g,n,k;
LL c;
scanf("%d",&k);
while(k--)
{
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
memset(f,,sizeof(f));
scanf("%d%I64d",&n,&c);
dp1[][] = dp2[][] = ;
int tt=;
for(i = ; i <= n ; i++)
{
for(j = ; j <= n ; j++)
{
for(g = ; g < j ; g++)
dp1[i][j]+=dp2[i-][g];
for(g = j ; g < i ; g++)
dp2[i][j]+=dp1[i-][g];
}
}
LL ss=;
int o=,ff;
for(i = ;i <= n ; i++)
{
c-=dp1[n][i];
if(c>)
{
c-=dp2[n][i];
ff = ;
}
else
{
ff=;
}
if(c<=)
{
pa[] = i;
f[i] = ;
if(ff==)
c+=dp2[n][i];
else
c+=dp1[n][i];
int y = n-;
while()
{
tt++;
if(tt>)
break;
int num=;
for(i = ; i <= ; i++)
{
if(i==pa[o])
break;
if(!f[i]) num++;
}
if(ff==)
{
for(i = num+; i <= y ; i++)
{
c-=dp1[y][i];
if(o==n-&&c==)
{
pa[++o] = judge(i);
break;
}
if(c<=)
{
c+=dp1[y][i];
y--;
pa[++o] = judge(i);
ff = ;
break;
}
}
}
else
{ for(i = ; i <= num ; i++)
{
c-=dp2[y][i];
if(o==n-&&c==)
{
pa[++o] = judge(i);
break;
}
if(c<=)
{
c+=dp2[y][i];
y--;
ff = ;
pa[++o] = judge(i);
break;
}
}
}
if(c==)
break;
}
break;
}
}
for(i = ; i < n ; i++)
printf("%d ",pa[i]);
printf("%d\n",pa[n]);
}
return ;
}
POJ1037A decorative fence(好dp)的更多相关文章
- POJ1037A decorative fence(动态规划+排序计数+好题)
http://poj.org/problem?id=1037 题意:输入木棒的个数n,其中每个木棒长度等于对应的编号,把木棒按照波浪形排序,然后输出第c个; 分析:总数为i跟木棒中第k短的木棒 就等于 ...
- POJ1037 A decorative fence
题意 Language:Default A decorative fence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 84 ...
- POJ1037 A decorative fence 【动态规划】
A decorative fence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6489 Accepted: 236 ...
- A decorative fence
A decorative fence 在\(1\sim n\)的全排列\(\{a_i\}\)中,只有大小交错的(即任意一个位置i满足\(a_{i-1}<a_i>a_{i+1}ora_{i- ...
- 【POJ1037】A decorative fence(DP)
BUPT2017 wintertraining(15) #6C 题意 给长度n的数列,1,2,..,n,按依次递增递减排序,求字典序第k小的排列. 题解 dp. up[i][j]表示长度为j,以第i小 ...
- $Poj1037\ A\ Decorative\ Fence$ 计数类$DP$
Poj AcWing Description Sol 这题很数位$DP$啊, 预处理$+$试填法 $F[i][j][k]$表示用$i$块长度不同的木板,当前木板(第$i$块)在这$i$块木板中从小到 ...
- Codeforces 659G Fence Divercity dp
Fence Divercity 我们设a[ i ] 为第 i 个围栏被切的最靠下的位置, 我们发现a[ i ] 的最大取值有一下信息: 如果从i - 1过来并在 i 结束a[ i ] = min(h ...
- Codeforces Round #346 (Div. 2) G. Fence Divercity dp
G. Fence Divercity 题目连接: http://www.codeforces.com/contest/659/problem/G Description Long ago, Vasil ...
- codeforces 659G G. Fence Divercity(dp)
题目链接: G. Fence Divercity time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
随机推荐
- JAVA类与对象(一)----基础概念理解
面向对象基本概念 面向对象是一种新兴的程序设计方法,或者说是一种新的程序设计规范,其基本思想是使用对象.类.继承.封装.消息等基本概念来进行程序设计.它是从现实世界客观存在的事物(即对象)出发来构造软 ...
- SQL Server 2008安装和配置过程
下面我将用图解的方式,来介绍SQL Server 2008安装和配置过程,希望对大家有所帮助. 闲言少叙,直奔主题!点击setup.exe安装文件后,如果系统没有以下组件,则会出现如下提示! 安装20 ...
- div+css布局细节问题
cursor: pointer;在chrome里支持,hand不支持
- 初涉Node.js
Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台. Node.js使用事件驱动.非阻塞I/ O模型,是轻量级.高效.完美的跨分布式设备运 ...
- bndtools教程
使用工具编程的确能给人们带来很多便利,但是在不会用之前,且缺乏相应的中文资料让你去了解时,真是一种折磨,同时也是一种挑战. bndTools其实就是用来开发OSGi的一个工具,它为开发提供了便利,具体 ...
- mongodb 的安装历程
mongo 安装历程 mongo的安装方法有千万种,只有一种让我觉得还不错,说说安装过程中的一点心德. 方法一:源码安装,千万别用这种方法,尼马我用虚拟机编译了一下午,竟然没有编译完,强制关机,第二天 ...
- Codeforces Round #227 (Div. 2) E. George and Cards 线段树+set
题目链接: 题目 E. George and Cards time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 ...
- [转]GLES 3.0 新特性
转自: http://www.ifanr.com/131333 OpenGL ES 3.0 带来很多新特性,根据 AnandTech 的解释: 支持更多缓冲区对象.在 OpenGL ES 2.0 时中 ...
- 修改npm包管理器的registry为淘宝镜像(npm.taobao.org)
起因 安装了node,安装了npm之后,官方的源实在是 太慢了! 看了看淘宝的npm镜像, http://npm.taobao.org/ 竟然说让我再下载一个cnpm,要不然就每次都得install ...
- getHibernateTemplate()为NUll
getHibernateTemplate()为NUll,困扰好几天了,网上也找了好些方法一直解决不掉15 小弟刚刚开始学SSH,是用的Struts2+Hibernate+Spring,运行的时候发现g ...