uva103 动态规划
多维矩形嵌套,和二维的一模一样。判断能否嵌套时需要先排序。
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 动态规划的更多相关文章
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- UVA103 dp基础题,DAG模型
1.UVA103 嵌套n维空间 DAG模型记忆化搜索,或者 最长上升子序列. 2.dp[i]=max( dp[j]+1),(第i个小于第j个) (1) //DAG模型记忆化搜索 #include< ...
随机推荐
- scrapy_简介页面和详情页面
如何对提取的URL进行限定? 往上找id和class属性值,进行多次层级选择,进行内容限定 如何实现获取主页所有urls,然后交给scrapy下载后并解析详情页面,返回结果?(文章简介页面和文章详细页 ...
- j2e中操作EXCEL
在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...
- 国内不谈java
今天晚上在整理电脑,不知道怎么回事,电脑里面放着一篇文章.打开一看写的挺好的,现在就贴出来,望共勉. 国内不谈java--会有千万人跳出来和你争嘴的.越是如此,我越是不忍心不说出来,越是不不忍心看 ...
- org.json.JSONObject的optXXX方法
JSONObject有很多optXXX方法,比如optBoolean,optString,optInt.... 他们的意思是:如果这个JSONObject对象,如果有返回这个属性的值,如果没有返回一个 ...
- 我的运维之旅-查找文本的linux命令
小伙伴们肯定都遇到这么尴尬场景,线上服务出问题了,老大一直在问什么问题导致的,而你由于对查找文本的命令不太熟,鼓捣了半天才找到那条 异常日志,而这时可能半个小时都已经过去了.老大可能对你失望透顶了.讲 ...
- 日历插件——laydate.js
laydate是一款很好用的日历控件,兼容了包括IE6在内的所有主流浏览器,默认有三种皮肤,如需其它皮肤可去官网下载http://www.layui.com/laydate/ 一.核心方法:layd ...
- awk匹配以aaa开头,以bbb结尾的内容,同时aaa和bbb之间还包含ccc
如果是匹配以A开头,以B结尾的内容,同时A和B之间还包含C的这种怎么做?比如 [root@localhost ~]#cat file aaa grge ddd bbb aaa gege ccc bbb ...
- Java NIO之网络编程
最近在研究Java NIO和netty,曾经一度感觉很吃力,根本原因还是对操作系统.TCP/IP.socket编程的理解不到位. 不禁感叹,还是当初逃的课太多. 假如上天给我一次机会,能够再回到意气风 ...
- Java基础系列--Executor框架(一)
文章来源:http://www.cnblogs.com/V1haoge/p/8393618.html 一.Executor框架介绍 Executor框架是JDK1.5之后出现的,位于juc包中,是并发 ...
- 关于spring通知中propagation的7种配置《转载》
<转载>:http://nannan408.iteye.com/blog/1754882