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 ...
随机推荐
- 登录超时自动退出,计算时间差-b
// 此方法适用于所有被创建过的controller,且当前controller生命周期存在,如有错误的地方望大神斧正 // 说一下我们的需求和实现原理,需求:在点击home键退出但没有滑飞它,5分 ...
- [转载]C#时间函数
本文转自livedanta的博客的<C#时间函数> DateTime DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21 ...
- Javascript核心概述 - 深入了解javascript
/* 一.执行上下文:堆栈(底部全局上下文+顶部当前活动上下文) */ /* 二.变量对象: 变量根据执行上下文,找到数据存储位置,这种机制叫变量对象 1. 变量都要var定义,且都不能delete ...
- 如何解决Mac与iPhone之间handoff连接问题
首先账户以及设备handoff开关问题不再赘述.主要是昨天发现的一个小技巧 当确认所有设备的iCloud账号统一.蓝牙打开.处在同一WiFi下的前提下,我的iPhone和Mac仍然handoff连接有 ...
- unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor
eclipse启动项目时,提示超时: 解决方案: 修改 workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件. ...
- 2064: 分裂 - BZOJ
Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中 ...
- Eclipse中的Web项目自动部署到Tomcat(转)
转自:http://www.cnblogs.com/ywl925/p/3815173.html 问题: 这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中.在Eclipse中做 ...
- 时隔8年HTML 5终于定稿!
我们第一次谈论 HTML5 要改变世界大概是因为乔布斯,他坚持在 iOS 上不兼容 Flash,在 Adobe 统治多媒体开发的那个年代,这需要付出极大的勇气.这么多年过去了,虽然所有人都在谈论 HT ...
- 解决eclipse打开报错:failed to create the java virtual ma
在Eclipse安装目录下找到:eclipse.ini 将如下参数改为: --launcher.XXMaxPermSize 128M ------------------------------- 说 ...
- ZendStudio中设置SVN:ignore
使用ZendStudio开发SVN中的代码时,经常容易将 .project..settings..buildpath 这类的zend的工程文件提交上去,非常麻烦,有几种方法可以去掉这个麻烦. 1.在Z ...