1、UVA103 嵌套n维空间 DAG模型记忆化搜索,或者 最长上升子序列。

2、dp[i]=max( dp[j]+1),(第i个小于第j个)

(1)

//DAG模型记忆化搜索
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 1e6+, M=; int n,m;
int box[M][M],dp[M],fa[M],vis[M],G[M][M];
bool jBigi(int a,int b)
{
FF(i,,m) if(box[a][i]>=box[b][i]) return false;
return true;
}
int D(int x)
{
if(vis[x]) return dp[x];
vis[x]=;
int &ans=dp[x]=;
FF(i,,n) if(G[x][i] && ans<D(i)+) {
ans=D(i)+, fa[x]=i;
}
return ans;
}
void print_ans(int mi)
{
printf("%d\n", dp[mi]);
int first=;
while(mi!=-) {
if(!first) printf(" "); first=;
printf("%d", mi);
mi=fa[mi];
}
printf("\n");
}
int main()
{
while(~scanf("%d%d", &n,&m)) {
FF(i,,n) {
FF(j,,m) scanf("%d", &box[i][j]);
sort(box[i]+,box[i]++m);
} mes(G,); mes(vis,); mes(fa,-);
FF(i,,n) FF(j,,n) if(jBigi(i,j)) G[i][j]=;
int maxn=-INF, mi;
FF(i,,n) {
dp[i]=D(i);
if(maxn<dp[i]) maxn=dp[i], mi=i;
}
print_ans(mi);
} return ;
}

(2)

//最长上升子序列
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const long long LINF = 1e18+1LL;
const int N = 1e5+, M = ; int dp[M],fa[M],n,m;
struct box
{
int di[M],ord;
void Sort() { sort(di+,di+m+); }
friend bool operator < (const box & a, const box & b) {
FF(i,,m) if(a.di[i]>b.di[i]) return false; //注:这里不能>=,必须>。因为是重载<,要尽可能使a<b
return true;
}
}B[M]; bool jBigi(int a,int b)
{
FF(i,,m) if(B[a].di[i]>=B[b].di[i]) return false;
return true;
}
void print_ans(int mi)
{
printf("%d\n", dp[mi]);
int first=;
while(mi!=-) {
if(!first) printf(" "); first=;
printf("%d", B[mi].ord);
mi=fa[mi];
}
printf("\n");
}
int main()
{
while(~scanf("%d%d", &n,&m))
{
FF(i,,n) {
FF(j,,m) scanf("%d", &B[i].di[j]);
B[i].Sort(); B[i].ord=i;
}
sort(B+,B++n);
mes(fa,-);
int maxn=-INF, mi;
for(int i=n; i>; --i) { dp[i]=;
for(int j=n; j>i; --j) {
if(jBigi(i,j) && dp[i]<dp[j]+) {
dp[i]=dp[j]+, fa[i]=j;
}
if(maxn<dp[i]) maxn=dp[i], mi=i;
}
}
print_ans(mi);
} return ;
}

UVA103 dp基础题,DAG模型的更多相关文章

  1. hdu 2089 不要62 (数位dp基础题)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. poj 2955 Brackets (区间dp基础题)

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  3. poj2642 The Brick Stops Here(DP基础题)

    比基础的多一点东西的背包问题. 链接:POJ2642 大意:有N种砖,每种花费p[i],含铜量c[i],现需要用M种不同的砖融成含铜量在Cmin到Cmax之间(可等于)的砖,即这M种砖的含铜量平均值在 ...

  4. hdu 2845(dp基础题)

    题意:容易理解. 分析:以后碰到这种类型的题,就要考虑把矩阵先按行来处理,再按列处理.先算出每行能够能够得到的最大值,然后按列处理即可. 代码实现: #include<stdio.h> # ...

  5. 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)

    1083 矩阵取数问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下 ...

  6. HDU3853 LOOPS 期望DP基础题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题目大意(只是大意,名字什么的可能和原题描述不一样~): 爱丽丝与华容道 题目描述 爱丽丝是一个 ...

  7. POJ Corn Fields 状态压缩DP基础题

    题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...

  8. POJ 2342 Anniversary party 树形DP基础题

    题目链接:http://poj.org/problem?id=2342 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人 ...

  9. 牛客假日团队赛5 K 金币馅饼 (DP 基础题)

    链接:https://ac.nowcoder.com/acm/contest/984/K 来源:牛客网 金币馅饼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

随机推荐

  1. layui常用方法

    很好用的一个ui组件,弹出,分页等 http://layer.layui.com/ 1 带叉叉的弹窗 layer.open({ type: , title: false, //不显示标题 conten ...

  2. 【java回调】java两个类之间的回调函数传递

    背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...

  3. Python 之旅

    Python2 之旅:   https://funhacks.net/explore-python/ <Python Cookbook>第三版   PYTHON3   http://pyt ...

  4. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  5. nginx配置返回文本或json

    有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响 ...

  6. python正则表达式re

    Python正则表达式: re 正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可 ...

  7. Spring mvc时间格式处理

    spring mvc中,如果时间格式是yyyy-MM-dd,传入后台会报错,要增加一些配置才可以. 1.修改spring-mvc.xml,增加org.springframework.format.su ...

  8. 惊闻Java要收费之后

    今天看到朋友圈里的文章 <Oracle终于要向Java的非付费用户开枪了>,被这个标题吓了一跳,还以为Java要全面收费了.又被标题党骗了. 但是仔细想想,以Oracle公司的尿性,没准哪 ...

  9. vue2.0环境搭建

    1.安装node.js(官网) 2.安装淘宝镜像  npm install -g cnpm --registry=https://registry.npm.taobao.org 3.安装webpack ...

  10. Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群

    一.环境说明:     操作系统:Centos-6.5_x86_64    keepalived软件安装在node2和node3机器上.     实际安装之前,先关闭keepalived节点(node ...