UVA 6177 The King's Ups and Downs DP

orz想了好久好久的排列组合,未果,考虑不全……DP好难啊233333

题目链接戳这里

抛开整体不考虑,我们来考虑一下只有3个人的局部问题:

只要第i-1个人比i矮(高)第i+1个人比i矮(高),i当前位置就是满足题意的

设f[i][j]为排列的第i位为j,而且i-1位比j小

设g[i][j]为排列的第i位位j,而且i-1位比j大

emmmmm明天补

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX= 13e5;
int t,n,m;
ll dp[25][25];
ll ans[25];
void init()
{
    memset(ans,0,sizeof(ans));
    dp[1][1]=1;
    ans[1]=1;
    for(int i=2;i<25;i++)
     for(int j=2;j<=i;j++)
     {
      dp[i][j]=dp[i-1][i-j+1]+dp[i][j-1];
      ans[i]+=dp[i][j]*2;
     }
}
int main()
{
    cin>>t;
    init();
    while(t--)
    {
        cin>>n>>m;
        cout<<n<<" "<<ans[m]<<endl;
    }
    return 0;
 } 

UVA 6177 The King's Ups and Downs DP

原文地址:https://www.cnblogs.com/Egoist-/p/8185798.html

时间: 2024-10-13 08:35:42

UVA 6177 The King's Ups and Downs DP的相关文章

DpUVALive 6177The King&#39;s Ups and Downs

练习赛的时候写了个爆搜,然后没跑出来 就不搞了, 田腿说用状压跑,打表.其实有能直接过的Dp吧. 下面是打表的Dp..结果除了第一个 其余乘以2就行了. #include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #inclu

HDU 4489 The King&#39;s Ups and Downs

题目链接 问的是n个不一样的数,大小交替,或者小大交替的种类数量. n个数,想象成[1,n]的自然数即可. 我们假设大小交替得到的长度为i的排列数为dp1[i],小大交替得到的长度为i的排列数为dp2[i],因为是对称的,其实应该有dp1=dp2,我们要计算的总和sum=dp1+dp2. 我们从小到大考虑各个数,一个个插入队列,考虑到第i个数,称为ai,ai比前i-1个数都大,可以插入的位置j∈[1,i]. ai插入的位置为j时,前面的i-1个人比自己小,选择出来排列的情况有C(i-1,j-1)

HDU 4489 The King’s Ups and Downs (DP+数学计数)

题意:给你n个身高高低不同的士兵.问你把他们按照波浪状排列(高低高或低高低)有多少方法数. 析:这是一个DP题是很明显的,因为你暴力的话,一定会超时,应该在第15个时,就过不去了,所以这是一个DP计数问题. 那么我们应该怎么想呢,我们先假设前 i-1 个已经放好了,然后第 i 个一定是最高的,所以,他一定要在前面找一个低后面放上他,肯定不能放在高的后面, 那么状态就有的表示了,d[i][0]表示是以低结尾,d[i][1]是以高结尾,我们假设放第 i 个士兵时,前面有 j 个,那么后面就有 i -

HDU 4055 The King’s Ups and Downs(DP计数)

题意:国王的士兵有n个,每个人的身高都不同,国王要将他们排列,必须一高一矮间隔进行,即其中的一个人必须同时高于(或低于)左边和右边.问可能的排列数.例子有1千个,但是最多只算到20个士兵,并且20个的情况的答案已给出. 思路:是此题HDU 4055 Number String(DP计数) 的简单版,所以看此题解就行了.数量较小,可以预先算出来.要同时考虑 <><>和><><这样的两种情况. 1 #include <iostream> 2 #inc

HDU 4489 The King’s Ups and Downs

http://acm.hdu.edu.cn/showproblem.php?pid=4489 题意:有n个身高不同的人,计算高低或低高交错排列的方法数. 思路:可以按照身高顺序依次插进去. d[i][0]表示i个人以高低结尾的方法数,d[i][1]表示i个人以低高开头的方法数. 将第i个人插入时,当它左边为j个人的时候,右边就是i-1-j,并且左边必须要以高低结尾,右边必须以低高开头.也就是d[i-1][0]*d[i-1][1].当然了,后面还得再乘c(i-1,j),表示选j个人的方法数. 1

The King’s Ups and Downs

有n个高矮不同的士兵,现在要将他们按高,矮依次排列,问有多少种情况. 化简为 n个人,求出可以形成波浪形状的方法数 #include <iostream> #include <cmath> #include <math.h> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #define ll long long usi

【UVa】Headmaster&#39;s Headache(状压dp)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1758 晕....状压没考虑循环方向然后错了好久.. 这点要注意...(其实就是01背包变成了完全背包QAQ 我们将课程拆成两个点,然后状压 那么答案就是(1<<(s<<1))-1 转移就不说了,,,,,太简单.. #include <cstdio> #in

UVA 1025 A Spy in the Metro(DP)

Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling events we find her in the first station of Algorithms City Metro, examining the time table. The Algorithms City Metro consists of a s

UVA - 10817 Headmaster&#39;s Headache (状压dp+记忆化搜索)

题意:有M个已聘教师,N个候选老师,S个科目,已知每个老师的雇佣费和可教科目,已聘老师必须雇佣,要求每个科目至少两个老师教的情况下,最少的雇佣费用. 分析: 1.为让雇佣费尽可能少,雇佣的老师应教他所能教的所有科目. 2.已聘老师必须选,候选老师可选可不选. 3.dfs(cur, subject1, subject2)---求出在当前已选cur个老师,有一个老师教的科目状态为 subject1,有两个及以上老师教的科目状态为 subject2的情况下,最少的雇佣费用. dp[cur][subje