多维矩形嵌套,和二维的一模一样。判断能否嵌套时需要先排序。

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=30+5;
int G[maxn][maxn],dp[maxn];
struct node{
    int pos[15];
};
node a[maxn];
int n,k;
int solve(int i){
    if(dp[i]>0) return dp[i];
    int ans=1;
    for(int j=0;j<n;++j){
        if(G[i][j]) ans=max(ans,solve(j)+1);
    }
    return dp[i]=ans;
}

vector<int>way;
void print(int i){
    way.push_back(i+1);
    for(int j=0;j<n;++j){
        if(G[i][j]&&dp[j]+1==dp[i]){
            print(j);
            break;
        }
    }
}
int main(){
    while(scanf("%d%d",&n,&k)==2){
        for(int i=0;i<n;++i){
            for(int j=0;j<k;++j){
                scanf("%d",&a[i].pos[j]);
            }
            sort(a[i].pos,a[i].pos+k);
        }
        memset(dp,0,sizeof(dp));
        memset(G,0,sizeof(G));
        for(int i=0;i<n;++i)
        for(int j=0;j<n;++j){
            node &u=a[i],&v=a[j];
            int flag=1;
            for(int c=0;c<k;++c){
                if(u.pos[c]>=v.pos[c]){
                    flag=0;
                    break;
                }
            }
            if(flag) G[i][j]=1;
        }
        int ans=1;
        for(int i=0;i<n;++i){
            ans=max(ans,solve(i));
        }
        printf("%d\n",ans);
        //print
        for(int i=0;i<n;++i)
            if(dp[i]==ans){
                print(i);
                break;
            }
        for(int i=0;i<way.size();++i){
            if(i==0) printf("%d",way[i]);
            else printf(" %d",way[i]);
        }
        printf("\n");
        way.clear();
        }

    return 0;
}

如有不当之处欢迎指出!

uva103 动态规划的更多相关文章

  1. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  2. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  3. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  5. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  6. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  7. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  9. UVA103 dp基础题,DAG模型

    1.UVA103 嵌套n维空间 DAG模型记忆化搜索,或者 最长上升子序列. 2.dp[i]=max( dp[j]+1),(第i个小于第j个) (1) //DAG模型记忆化搜索 #include< ...

随机推荐

  1. CSS3 三角形运用

      酷酷的 CSS3 三角形运用 概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角.阴影.锯齿或者一些小图标. 在CSS3出现 ...

  2. Linux make nginx 的时候报错

    报错如下: `conf/koi-win' and `/usr/local/nginx/conf/koi-win' are the same file   原因: 可能在编译 nginx 的时候步骤不对 ...

  3. JS获取滚动条距离顶部高度

    一.jQuery获取的相关方法 jquery 获取滚动条高度 获取浏览器显示区域的高度 : $(window).height(); 获取浏览器显示区域的宽度 : $(window).width(); ...

  4. unity getcomponentsinchildren 翻船

    今天使用GetComponentsInChildren, 老司机翻船.因为一直以来我使用这个函数,下意识的从来所有的相同component都是放在子节点下,本身节点肯定不会放一个相同的componen ...

  5. disptch_after 自递归

    NSArray *arr = @[@"1", @"2", @"3", @"4", @"5"];    ...

  6. useradd和adduser

    1.Ubuntu中,adduser是一个脚本,而useradd是一个二进制程序,前者对后者进行了封装,更加智能. 2.Centos中,adduser和useradd完全相同,adduser是一个符号链 ...

  7. Django的CBV和FBV

    一.FBV FBV(function base views) 就是在视图里使用函数处理请求,也是我们最开始接触和使用的方式,普通项目中最常见的方式. urls.py 1 2 3 4 urlpatter ...

  8. 23_迭代器、模拟For循环

    一.可迭代对象 和 迭代器 1.可迭代对象和迭代器 可迭代对象:可以直接作用于for循环的对象统称为可迭代对象,Iterable. 迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器 ...

  9. Python元编程

    简单定义"元编程是一种编写计算机程序的技术,这些程序可以将自己看做数据,因此你可以在运行时对它进行内审.生成和/或修改",本博参考<<Python高级编程>> ...

  10. JMS基础篇

    首先我们需要下载 ActiveMQ:http://activemq.apache.org/. 启动 ActiveMQ 服务:解包下载的 ActiveMQ >进去其bin 目录>双击 act ...