题意:给出每个城市interesting的值,和城市之间的飞行路线,求一条闭合路线(从原点出发又回到原点)

使得路线上的interesting的值之和最大

因为要输出路径,所以用pre数组来保存前驱

在输出路径的时候,我是把前驱一次放在route数组里面,然后再将整个数组反转过来

另外,看别人的题解里面还有一种递归的方法求路径,挺有新意,学习了

我的做法:

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
bool flight[][];
int city[];
int dp[];
int pre[];
int route[]; int main(void)
{
#ifdef LOCAL
freopen("1224in.txt", "r", stdin);
#endif int N, kase;
scanf("%d", &N);
for(kase = ; kase <= N; ++kase)
{
if(kase > ) printf("\n"); int n;
scanf("%d", &n);
int i;
for(i = ; i <= n; ++i)
scanf("%d", &city[i]);
city[n + ] = ; int m, from, to;
memset(flight, , sizeof(flight));
scanf("%d", &m);
for(i = ; i <= m; ++i)
{
scanf("%d%d", &from, &to);
flight[from][to] = true;
} memset(dp, , sizeof(dp));
memset(pre, , sizeof(pre));
int j;
for(i = ; i <= n + ; ++i)
for(j = ; j < i; ++j)
if(flight[j][i]
&& (dp[j] + city[i]) > dp[i])
{
dp[i] = dp[j] + city[i];
pre[i] = j;
} printf("CASE %d#\n", kase);
printf("points : %d\n", dp[n + ]);
int p = n + , len = ;
while(pre[p] != )
{
route[len++] = pre[p];
p = pre[p];
}
for(i = ; i < len / ; ++i)
{
int t = route[i];
route[i] = route[len - i -];
route[len - i -] = t;
} printf("circuit : ");
for(i = ; i < len; ++i)
printf("%d->", route[i]);
printf("1\n");
} return ;
}

代码君

别人递归回溯输出路径的做法:

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
bool flight[][];
int city[];
int dp[];
int pre[];
int route[]; void putroute(int p)
{
if(p == )
return;
putroute(pre[p]);
printf("%d->", p);
} int main(void)
{
#ifdef LOCAL
freopen("1224in.txt", "r", stdin);
#endif int N, kase;
scanf("%d", &N);
for(kase = ; kase <= N; ++kase)
{
if(kase > ) printf("\n"); int n;
scanf("%d", &n);
int i;
for(i = ; i <= n; ++i)
scanf("%d", &city[i]);
city[n + ] = ; int m, from, to;
memset(flight, , sizeof(flight));
scanf("%d", &m);
for(i = ; i <= m; ++i)
{
scanf("%d%d", &from, &to);
flight[from][to] = true;
} memset(dp, , sizeof(dp));
memset(pre, , sizeof(pre));
int j;
for(i = ; i <= n + ; ++i)
for(j = ; j < i; ++j)
if(flight[j][i]
&& (dp[j] + city[i]) > dp[i])
{
dp[i] = dp[j] + city[i];
pre[i] = j;
} printf("CASE %d#\n", kase);
printf("points : %d\n", dp[n + ]); printf("circuit : ");
putroute(pre[n + ]);
printf("1\n");
} return ;
}

代码君

HDU 1224 Free DIY Tour的更多相关文章

  1. HDU 1224 Free DIY Tour(spfa求最长路+路径输出)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Oth ...

  2. hdu 1224 Free DIY Tour(最长的公路/dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...

  3. HDU 1224 Free DIY Tour - 最短路

    传送门 题目大意: 一个有向图(n + 1相当于1),每个点有一个权值(可以认为1和n+1权值为0),求从1走到n+1(相当于走回1)的最大路径权值和是多少,输出方案. 题目分析: 最短路问题,输出方 ...

  4. HDU ACM 1224 Free DIY Tour (SPFA)

    Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. 【HDOJ】1224 Free DIY Tour

    DP. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm ...

  6. hdu 1224(动态规划 DAG上的最长路)

    Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. 动态规划:HDU1224-Free DIY Tour

       Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. A - Free DIY Tour HDU - 1224

    题目大意:每一个城市都有一定的魅力值,然后有一个有向图,根据这个有向图从1到n+1所获得的魅力的最大值,并输出路径(要求只能从编号娇小的城市到编号较大的城市). 题解:很容易想到最短路+路径纪录.但是 ...

  9. hdu Free DIY Tour

    http://acm.hdu.edu.cn/showproblem.php?pid=1224 #include <cstdio> #include <cstring> #inc ...

随机推荐

  1. ExtJS与jQuery的一点细节上的对比

    首先说明这不是一篇完整解读ExtJS和jQuery所有方面差异的文章,只是针对我个人刚看了两天的jQuery产生的一些疑问的整理.之前用过一段时间ExtJS,了解ExtJS的一些机制.现在做移动开发, ...

  2. ibatis中iterate的用法(conjunction="or" ",")

    例子一 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap < ...

  3. mysql存储过程和函数使用实例

    1.需求:根据输入的年份,月份,和当前系统的年份比较,不满1年按1年计算,多出1年11个月也按1年计算. 2.计算得出来的使用年份,计算车辆残值. 3.存储过程 DELIMITER $$ USE `d ...

  4. BZOJ1083: [SCOI2005]繁忙的都市

    水题之王SP…这题就裸的最小生成树 /************************************************************** Problem: 1083 User ...

  5. Java日志记录的事儿

    一.java日志组件 1.common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的 ...

  6. POJ 1656

    #include<iostream>//chengdacaizi 08 .11. 12 #include<string> using namespace std; ][]={} ...

  7. SQL技术内幕-13 SQL优化方法论之分析实例级别的等待

    优化方法论的第一步是在实例级别上找出什么类型的等待占用了大部分的等待时间,这可以通过查询动态管理图(DMV,dynamic management view)sys.dm_os_wait_stats 运 ...

  8. strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)

    strcpy的实现: //GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); ...

  9. HDU 4169 树形DP

    Wealthy Family Problem Description While studying the history of royal families, you want to know ho ...

  10. Spark源码分析环境搭建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...