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 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ... 
随机推荐
- webpack4试水总结
			看了官方的升级通告,据说webpack4的打包效率提升近一倍,于是最近在项目分支上升级了下webpack4,过程中的一些报错及问题简单整理下,以供交流. 在之前的旧项目上单纯的升级webpack版本后 ... 
- Python处理HTML转义字符
			抓网页数据经常遇到例如>或者 这种HTML转义符,抓到字符串里很是烦人. 比方说一个从网页中抓到的字符串: html = '<abc>' 用Python可以这样处理: import ... 
- JDK1.7 新特性
			1:switch中可以使用字串 String s = "test"; switch (s) { case "test" : System. ... 
- pandas的concat函数和append方法
			pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, nam ... 
- Prime Gift CodeForces - 912E (中途相遇)
			链接 大意:求素因子只含给定素数的第k大数 先二分答案转为判定x是第几大, 然后分两块合并即可, 按奇偶分块可以优化一下常数 #include <iostream> #include &l ... 
- git 下载代码
			git clone https://github.com/ContextLogic/Wish-Merchant-API.git wish(wish是下载的地址,这样的话,就在你的住文件夹上) 
- 弗洛伊德算法(Floyd算法)
			原博来自http://www.cnblogs.com/skywang12345/ 弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的 ... 
- vijos1098 经典LIS变形
			合唱队形 描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1, ... 
- PL/SQL 中 dbms_output.put_line 输出字符长度限制的问题
			可以使用dbms_out.enable()函数来设定允许的长度. PL/SQL 中 dbms_output.put_line 输出字符长度限制的问题 
- IOS UI总结
			一.UIView常见属性 1.frame 位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点(以父控件的左上角为原点(0,0)) 3.bounds 位置和尺寸(以自己的左上角为 ... 
