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+10, M=35;int n,m;
int box[M][M],dp[M],fa[M],vis[M],G[M][M];
bool jBigi(int a,int b)
{FF(i,1,m) if(box[a][i]>=box[b][i]) return false;return true;
}
int D(int x)
{if(vis[x]) return dp[x];vis[x]=1;int &ans=dp[x]=1;FF(i,1,n) if(G[x][i] && ans<D(i)+1) {ans=D(i)+1, fa[x]=i;}return ans;
}
void print_ans(int mi)
{printf("%d\n", dp[mi]);int first=1;while(mi!=-1) {if(!first) printf(" "); first=0;printf("%d", mi);mi=fa[mi];}printf("\n");
}
int main()
{while(~scanf("%d%d", &n,&m)) {FF(i,1,n) {FF(j,1,m) scanf("%d", &box[i][j]);sort(box[i]+1,box[i]+1+m);}mes(G,0);  mes(vis,0);  mes(fa,-1);FF(i,1,n) FF(j,1,n) if(jBigi(i,j)) G[i][j]=1;int maxn=-INF, mi;FF(i,1,n) {dp[i]=D(i);if(maxn<dp[i]) maxn=dp[i], mi=i;}print_ans(mi);}return 0;
}

View Code

(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+10, M = 35;int dp[M],fa[M],n,m;
struct box
{int di[M],ord;void Sort() { sort(di+1,di+m+1); }friend bool operator < (const box & a, const box & b) {FF(i,1,m) if(a.di[i]>b.di[i]) return false;     //注:这里不能>=,必须>。因为是重载<,要尽可能使a<breturn true;}
}B[M];bool jBigi(int a,int b)
{FF(i,1,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=1;while(mi!=-1) {if(!first) printf(" "); first=0;printf("%d", B[mi].ord);mi=fa[mi];}printf("\n");
}
int main()
{while(~scanf("%d%d", &n,&m)){FF(i,1,n) {FF(j,1,m) scanf("%d", &B[i].di[j]);B[i].Sort(); B[i].ord=i;}sort(B+1,B+1+n);mes(fa,-1);int maxn=-INF, mi;for(int i=n; i>0; --i) { dp[i]=1;for(int j=n; j>i; --j) {if(jBigi(i,j) && dp[i]<dp[j]+1) {dp[i]=dp[j]+1, fa[i]=j;}if(maxn<dp[i]) maxn=dp[i], mi=i;}}print_ans(mi);}return 0;
}

View Code

转载于:https://www.cnblogs.com/sbfhy/p/6082032.html

UVA103 dp基础题,DAG模型相关推荐

  1. 树形dp瞎讲+树形dp基础题题解

    ---恢复内容开始--- 没错 咕了这么久(没有青青姐久 我又开始写博客了( ´▽`) 想了很久些什么(才没有想过呢 虽然被鄙视基础不好但还是走上了树形dp的不归路 那么 就来写写树形dp吧(dtx ...

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

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

  3. A. Boredom(线性dp基础题)

    题目的大意是:给定你一个数组,每次可以删掉一个大小为a的数,获得a的分数,同时删除数列中所有大小为a+1和a-1的数.问删除所有数组中的数后,能够获得的最大分数值. 思路:本题可以用线性dp来解决.d ...

  4. 微型计算机最早提出于,计算机基础题1、世界上第一台电子计算机诞生于A)1943年B-查字典问答网...

    计算机基础题 1.世界上第一台电子计算机诞生于 A)1943年B)1946年 C)1945年D)1949年 2.世界上公认的第一台电子计算机的逻辑元件是 A)继电器B)晶体管 C)电子管D)集成电路 ...

  5. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  6. java gui中文变方块_150道Java面试基础题(含答案)

    1)Java 中能创建 volatile 数组吗? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组.我的意思是,如果改变引用指向的数组,将会受到 vo ...

  7. 2022深圳杯A题思路模型分析

    目录 A题分析 问题一分析 问题二分析: 分类问题 判别分析 聚类分析 神经网络分类方法 预测问题 回归分析法 时间序列分析法 灰色预测法 BP神经网络法 组合预测法 优化问题 组合优化经典问题 评价 ...

  8. PTA寒假基础题训练(含解题思路)(下)

    目录 7-36 字符串的冒泡排序 AC代码: 7-37 龟兔赛跑 AC代码: 7-38 N个数求和 AC代码: 7-39 数列求和-加强版 AC代码: 7-40 抓老鼠啊~亏了还是赚了? AC代码: ...

  9. 51nod 基础题题解(全)

    基础题(40): 1000 A + B 1005 大数加法 1006 最长公共子序列Lcs 1018 排序 1019 逆序数 1027 大数乘法 1046 A^B Mod C 1057 N的阶乘(大数 ...

最新文章

  1. bat curl 返回值_bat curl 发送http请求 监控网站
  2. 添加流程_艾多美手机商城苹果ios系统的主屏幕添加流程
  3. 多所高校官宣硕士扩招!最大扩招增幅近60%
  4. 一个QQ多用户登陆的实例代码
  5. linux mailx 发邮件
  6. 内存管理单元MMU学习
  7. setInterval只执行一次的原因
  8. linux cp后文件变大,使用 rsync 复制大文件的一些误解 | Linux 中国
  9. php在线预览文档,php如何实现文档在线预览
  10. unity中Animation与Animator的区别
  11. 1、Spring入门
  12. 一个算例 介绍 libmesh 的类
  13. python模块导入三种方式
  14. 提高生产力,这4款设计软件能自动生成代码
  15. kettle中的switch_kettle 教程(三):条件判断 Switch Case
  16. Django Zip文件下载
  17. 高德地图api使用过程出现崩溃
  18. 计算机备注用if函数怎么算,excel SUMIF函数按条件求和的使用详解
  19. 新经济的蛀虫——互联网大厂反腐那些事
  20. chrome + IDM + 油猴插件 实现百度网盘大文件的高速下载

热门文章

  1. linux实现标准设备输入输出,Linux的标准输入和输出
  2. python画正方形并涂色_关于python使用cv画矩形并填充颜色同时填充文字
  3. 【搞事】HTTP文件传输服务器搭建|网站文件分享|HFSxCHFS用法
  4. 【codevs1077】多源最短路
  5. java 自定义异常实例分析_Java自定义异常类的实例详解
  6. pythonpandas无列名数据合并_python – Pandas:合并多个数据帧和控制列名?
  7. 根据mysql生成数据库设计文档_通过navicat工具导出数据库的word格式的设计文档...
  8. 删掉m为后剩余的数组成的数最小
  9. 正则表达式(思维导图速查版)
  10. 回溯法 —— 求解0/1背包问题(剪枝)