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

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. POI--HSSFSheet类

    用POI来作成一个Sheet,可以用「HSSFSheet」类,该类构造器如下: 新建Sheet 从构造器可以看出,虽然它有两个构建器,但都是protected的,所以要新建Sheet,只能通过Work ...

  2. 无废话XML--XML约束(schema)

    Schema  的由来 DTD 作为 XML 1.0 规范的重要组成部分, 对于 XML 文档的结构起到很好的描述作用. 但是,它也具有一些缺点,比如,它采用了非 XML 的语法规则.不支持数据类型. ...

  3. R 调用 python

    上一篇说了python使用 rpy2 调用 R,这里介绍R如何调用python.R的强项在于统计方面,尤其是专业的统计分析,统计检验以及作图功能十分强大,但是在通用性方面,就远不如Python了,比如 ...

  4. linux的8小时差问题解决

    下面是同步时间的解决方法: 1.vi /etc/sysconfig/clock #编辑文件 ZONE="Asia/Shanghai" UTC=false #设置为false,硬件时 ...

  5. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.9_归一化normalization

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9 归一化Normaliation 训练神经网络,其中一个加速训练的方法就是归一化输入(normalize inputs). 假设我们有一个 ...

  6. css层叠样式初学

    一.css简介 1.层叠样式表:叠加效果,不同css对同一html修饰,冲突部分,优先级高作用,不冲突部分,共同作用 2.css作用 (1)修饰html (2)替代了标签自身的颜色,字号等属性,提高复 ...

  7. ssh 设置私钥实现两台linux主机无密码访问

    在服务器主机上(称为A主机) 创建公钥与私钥: ssh-keygen -t rsa 一路回车,如果想设置密码短语,在提示 passphrase 的时候设置密码短语 查看生成的公钥及私钥: ls ~/. ...

  8. 删除一个目录及其子目录下的所有.svn文件

    今天建立svn,加入代码,发现这些个文件夹中竟然已经有.svn文件夹,也就是它以前使用过svn, 这下就有点麻烦,在全新的svn里,这些.svn需要删除,又不可能一个一个手工去删除 网上翻了一下,发现 ...

  9. linux中sed在指定字符前后添加内容

      假设文档内容如下: [root@localhost ~]# cat /tmp/input.txt null 000011112222 test 要求:在1111之前添加AAA,方法如下: sed ...

  10. WebService的学习

    这篇文章不错,直接转了 http://blog.csdn.net/terryzero/article/details/5976638#comments