HDU 1224 Free DIY Tour
题意:给出每个城市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的更多相关文章
- 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 ...
- hdu 1224 Free DIY Tour(最长的公路/dp)
http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...
- HDU 1224 Free DIY Tour - 最短路
传送门 题目大意: 一个有向图(n + 1相当于1),每个点有一个权值(可以认为1和n+1权值为0),求从1走到n+1(相当于走回1)的最大路径权值和是多少,输出方案. 题目分析: 最短路问题,输出方 ...
- 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 ...
- 【HDOJ】1224 Free DIY Tour
DP. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm ...
- hdu 1224(动态规划 DAG上的最长路)
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 动态规划:HDU1224-Free DIY Tour
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- A - Free DIY Tour HDU - 1224
题目大意:每一个城市都有一定的魅力值,然后有一个有向图,根据这个有向图从1到n+1所获得的魅力的最大值,并输出路径(要求只能从编号娇小的城市到编号较大的城市). 题解:很容易想到最短路+路径纪录.但是 ...
- hdu Free DIY Tour
http://acm.hdu.edu.cn/showproblem.php?pid=1224 #include <cstdio> #include <cstring> #inc ...
随机推荐
- Apache CXF实现Web Service(5)—— GZIP使用
Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...
- Codeforces449A Jzzhu and Chocolate && 449B Jzzhu and Cities
CF挂0了,简直碉堡了.两道题都是正确的思路但是写残了.写个解题报告记录一下心路历程. A题问的是 一个n*m的方块的矩形上切k刀,最小的那一块最大可以是多少.不难发现如果纵向切k1刀,横向切k2刀, ...
- UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)
题目链接:http://acm.upc.edu.cn/problem.php?id=2224 题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A< ...
- SQL语句AND 和 OR执行的优先级
例句: ) FROM RT_CUSTALLOCRESULT WHERE REGDATE BETWEEN '2014-03-01' AND '2014-03-31' ) FROM RT_CUSTALLO ...
- 知问前端——概述及jQuery UI
知问系统,是一个问答系统.主要功能:即会员提出问题,会员回答问题.目前比较热门的此类网站有:知乎http://www.zhihu.com.百度知道http://zhidao.baidu.com等.这里 ...
- eclipse下python的selenium自动化环境的搭建
前提:安装python,我用的2.7.8版本,并在环境变量path里设置;E:\Python1.解压setuptools(Python包管理工具),cmd到目录执行python setup.py in ...
- 用Python+Django在Eclipse环境下开发web网站【转】
一.创建一个项目如果这是你第一次使用Django,那么你必须进行一些初始设置.也就是通过自动生成代码来建立一个Django项目--一个Django项目的设置集,包含了数据库配置.Django详细选项设 ...
- Spark源码分析(二)-SparkContext创建
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3872785.html SparkContext是应用启动时创建的Spark上下文对象,是一个重要的入口 ...
- NIM博弈的必胜取法
#include<stdio.h> ; int a[Max]; int main() { int i,n,ans; int tmp; while(scanf("%d", ...
- 物联网操作系统Hello China V1.76(PC串口版)版本发布
作为向ARM平台移植的基线版本,经过三个多月的努力,Hello China V1.76终于完成并发布.相对原来发布的V1.75版本,该版本主要做了如下修改: 彻底去掉了原来版本源代码中的C++特性,采 ...