hdu1224 dp(dp + 栈/父亲数组记录路径)
题意:给定 n 个城市的有趣度,并给出可以从那些城市飞到那些城市。其中第一个城市即起始城市同样也作为终点城市,有趣度为 0,旅行途中只允许按有趣度从低到高旅行,问旅行的有趣度最大是多少,并输出旅行路径。
我一开始读题的时候各种深井冰理解错想复杂,导致我一开始甚至认为第一个有趣度 0 代表的是第二个城市,因为第一个城市一定是 0 不需要给出,加上没看到题意里的第一个城市也是第 n + 1 个城市,觉得给出的能旅行的城市里出现了 n + 1 是应该的。还有关于城市联通,我以为给出的联通关系不一定就是按大小排列过后的,然后我还自行按有趣度高低排序之后再放入邻接矩阵。总之就是各种坑爹脑残各种蠢吧……
后来敲完之后各种 WA ,各种比较题解,才发现了各种情况……修修改改 WA 四发之后终于 AC ,输出整个路径我看见大部分题解上用的都是 father 数组,昂,我觉得我还是多珍惜下用栈的机会咯
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
using namespace std; struct city{
int v,l;
}c[];
/*
bool cmp(city c1,city c2){
return c1.v<c2.v;
}
*/
bool g[][];
int dp[]; int main(){
int T;
while(scanf("%d",&T)!=EOF){
for(int q=;q<=T;q++){
memset(g,,sizeof(g));
memset(dp,,sizeof(dp));
int n,m,i,j;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d",&c[i].v);
c[i].l=-;
}
c[].l=;
scanf("%d",&m);
for(i=;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(b==n+)g[a][]=;
else g[a][b]=;
}
int ans=,t=; for(i=;i<=n;i++){
for(j=;j<i;j++){
if(g[j][i]&&((dp[j]+c[i].v)>dp[i])){
dp[i]=dp[j]+c[i].v;
c[i].l=j;
if(g[i][]&&dp[i]>ans){
ans=dp[i];
t=i;
}
}
}
}
printf("CASE %d#\npoints : %d\ncircuit : ",q,ans);
stack<int>S;
int tmp=t;
while(!S.empty()){
S.pop();
}
S.push();
while(c[tmp].l!=tmp){
S.push(tmp);
tmp=c[tmp].l;
}
printf("");
while(!S.empty()){
tmp=S.top();
S.pop();
printf("->%d",tmp);
}
printf("\n");
if(q!=T)printf("\n");
}
}
return ;
}
hdu1224 dp(dp + 栈/父亲数组记录路径)的更多相关文章
- Minimum Transport Cost(floyd+二维数组记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- 【DP】UVA 624 CD 记录路径
开一个数组p 若dp[i-1][j]<dp[i-1][j-a[i]]+a[i]时就记录下p[j]=a[i];表示此时放进一个轨道 递归输出p #include <stdio.h> # ...
- codeforces 1272F dp+记录路径
题意 给出两个括号序列 \(S\) 和 \(T\),让你构造一个最短的合法括号序列使 \(S\) 和 \(T\) 是它的子序列. 分析 设 \(dp[i][j][k]\) 为这个最短的合法括号序列的前 ...
- hdu1074 状压DP、栈实现记录路径
题意:给了几门学科作业.它们的截止提交期限(天数).它们的需要完成的时间(天数),每项作业在截止日期后每拖延一天扣一学分,算最少扣的学分和其完成顺序. 一开始做的时候,只是听说过状态压缩这个神奇的东西 ...
- hdu 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...
- PAT L3-001 凑零钱(01背包dp记录路径)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- Codeforces Round #436 (Div. 2) E. Fire(dp 记录路径)
E. Fire time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...
- poj 2796 Feel Good dp || 单调栈
题目链接 题意 对于一个长度为\(n\)的非负整数数列\(a_1,a_2,-,a_n\),求\(max_{1≤l≤r≤n}f(l,r)\), 其中 \[f(l,r)=min(a_l,a_{l+1},- ...
- [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]
[luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...
随机推荐
- LeetCode--110--平衡二叉树
问题描述: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3,9,20,n ...
- axios构建请求池处理全局loading状态&&axios避免重复请求
很多时候我们能够看到类似进度条一样的东西在页面顶部进行加载,代表页面是否加载完成,或者其他的loading效果,我们当然不可能通过promise.all来讲所有的请求合并到一起然后进行处理,这个时候我 ...
- Java中HashMap的实现原理
最近面试中被问及Java中HashMap的原理,瞬间无言以对,因此痛定思痛觉得研究一番. 一.Java中的hashCode和equals 1.关于hashCode hashCode的存在主要是用于查找 ...
- UVA-11882 Biggest Number (DFS+剪枝)
题目大意:给出一个方格矩阵,矩阵中有数字0~9,任选一个格子为起点,将走过的数字连起来构成一个数,找出最大的那个数,每个格子只能走一次. 题目分析:DFS.剪枝方案:在当前的处境下,找出所有还能到达的 ...
- Oracle11g温习-第一章 2、ORACLE 物理结构
2013年4月27日 星期六 10:26 物理操作系统文件的集合.主要包括: 控制文件(参数文件init$ORACLE_SID.ora记录了控制文件的位置) 二进制文件,控制文件由参数control_ ...
- Java容器——Map接口
1.定义 Map用于保存存在映射关系<key, value>的数据.其中key值不能重复(使用equals()方法比较),value值可以重复. 2.常用实现类 HashMap:和Hash ...
- javascript--- hasOwnProperty、instanceof 、typeof的区别
typeof 作用:用来判断变量的类型 返回值: string 只有以下几种:number.boolean.string.object.undefined.function[很容易漏掉这个] 形式: ...
- 获取和设置消息队列的属性msgctl,删除消息队列
消息队列的属性保存在系统维护的数据结构msqid_ds中,用户可以通过函数msgctl获取或设置消息队列的属性. int msgctl(int msqid, int cmd, struct msqid ...
- httpclient 连接参数
http.socket.timeout(读取超时) 套接字毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间. 如果超时是0表示无限大的超时时间,即 ...
- Oracle 从共享池删除指定SQL的执行计划
ORACLE从共享池删除指定SQL的执行计划 2016-12-29 11:14 by 潇湘隐者, 2836 阅读, 0 评论, 收藏, 编辑 Oracle 11g在DBMS_SHARED_POOL包中 ...