UVA103 dp基础题,DAG模型
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模型相关推荐
- 树形dp瞎讲+树形dp基础题题解
---恢复内容开始--- 没错 咕了这么久(没有青青姐久 我又开始写博客了( ´▽`) 想了很久些什么(才没有想过呢 虽然被鄙视基础不好但还是走上了树形dp的不归路 那么 就来写写树形dp吧(dtx ...
- 牛客假日团队赛5 K 金币馅饼 (DP 基础题)
链接:https://ac.nowcoder.com/acm/contest/984/K 来源:牛客网 金币馅饼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- A. Boredom(线性dp基础题)
题目的大意是:给定你一个数组,每次可以删掉一个大小为a的数,获得a的分数,同时删除数列中所有大小为a+1和a-1的数.问删除所有数组中的数后,能够获得的最大分数值. 思路:本题可以用线性dp来解决.d ...
- 微型计算机最早提出于,计算机基础题1、世界上第一台电子计算机诞生于A)1943年B-查字典问答网...
计算机基础题 1.世界上第一台电子计算机诞生于 A)1943年B)1946年 C)1945年D)1949年 2.世界上公认的第一台电子计算机的逻辑元件是 A)继电器B)晶体管 C)电子管D)集成电路 ...
- 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 ...
- java gui中文变方块_150道Java面试基础题(含答案)
1)Java 中能创建 volatile 数组吗? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组.我的意思是,如果改变引用指向的数组,将会受到 vo ...
- 2022深圳杯A题思路模型分析
目录 A题分析 问题一分析 问题二分析: 分类问题 判别分析 聚类分析 神经网络分类方法 预测问题 回归分析法 时间序列分析法 灰色预测法 BP神经网络法 组合预测法 优化问题 组合优化经典问题 评价 ...
- PTA寒假基础题训练(含解题思路)(下)
目录 7-36 字符串的冒泡排序 AC代码: 7-37 龟兔赛跑 AC代码: 7-38 N个数求和 AC代码: 7-39 数列求和-加强版 AC代码: 7-40 抓老鼠啊~亏了还是赚了? AC代码: ...
- 51nod 基础题题解(全)
基础题(40): 1000 A + B 1005 大数加法 1006 最长公共子序列Lcs 1018 排序 1019 逆序数 1027 大数乘法 1046 A^B Mod C 1057 N的阶乘(大数 ...
最新文章
- bat curl 返回值_bat curl 发送http请求 监控网站
- 添加流程_艾多美手机商城苹果ios系统的主屏幕添加流程
- 多所高校官宣硕士扩招!最大扩招增幅近60%
- 一个QQ多用户登陆的实例代码
- linux mailx 发邮件
- 内存管理单元MMU学习
- setInterval只执行一次的原因
- linux cp后文件变大,使用 rsync 复制大文件的一些误解 | Linux 中国
- php在线预览文档,php如何实现文档在线预览
- unity中Animation与Animator的区别
- 1、Spring入门
- 一个算例 介绍 libmesh 的类
- python模块导入三种方式
- 提高生产力,这4款设计软件能自动生成代码
- kettle中的switch_kettle 教程(三):条件判断 Switch Case
- Django Zip文件下载
- 高德地图api使用过程出现崩溃
- 计算机备注用if函数怎么算,excel SUMIF函数按条件求和的使用详解
- 新经济的蛀虫——互联网大厂反腐那些事
- chrome + IDM + 油猴插件 实现百度网盘大文件的高速下载
热门文章
- linux实现标准设备输入输出,Linux的标准输入和输出
- python画正方形并涂色_关于python使用cv画矩形并填充颜色同时填充文字
- 【搞事】HTTP文件传输服务器搭建|网站文件分享|HFSxCHFS用法
- 【codevs1077】多源最短路
- java 自定义异常实例分析_Java自定义异常类的实例详解
- pythonpandas无列名数据合并_python – Pandas:合并多个数据帧和控制列名?
- 根据mysql生成数据库设计文档_通过navicat工具导出数据库的word格式的设计文档...
- 删掉m为后剩余的数组成的数最小
- 正则表达式(思维导图速查版)
- 回溯法 —— 求解0/1背包问题(剪枝)