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 ...
随机推荐
- SQL分页查询总结{转}
开发过程中经常遇到分页的需求,今天在此总结一下吧.简单说来方法有两种,一种在源上控制,一种在端上控制.源上控制把分页逻辑放在SQL层:端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridVie ...
- POJ 2480 Longge's problem (积性函数,欧拉函数)
题意:求∑gcd(i,n),1<=i<=n思路:f(n)=∑gcd(i,n),1<=i<=n可以知道,其实f(n)=sum(p*φ(n/p)),其中p是n的因子.为什么呢?原因 ...
- POJ 1419
#include <iostream> #define MAXN 105 #define max _max using namespace std; int j; bool _m[MAXN ...
- springmvc的系统学习之配置方式
资源:尚学堂 邹波 springmvc框架视频 一.springMVC 工作流程 页面请求---->控制器(Controller DispatcherServlet)----& ...
- MongoDB (九) MongoDB 投影
mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个.如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段. find() 方法 MongoDB 的find()方法, ...
- c# 事件为何要继承EventArgs
1:继承EventArgs是表示该类可作为事件,删掉了就默认继承object,没人会说你错 ----就是说事件不继承EventArgs 也没有错,也能正常运用,那么继承他的意义是什么呢?看2,3. 觉 ...
- python urllib2的proxyhandler
1. 再a方法中新建了个opener,使用了代理: proxydict = {} proxydict['http'] = "http://%s:%s"%(ip,port) #pri ...
- Centos环境下部署游戏服务器-Eclipse
一直在想这篇文章该不该写,因为这篇文章更像是教你如何使用一个ide这种文章,毫无价值可言.但思来想去还是应给写.上篇文章主要说了编译原理和过程,这篇文章就是理论联系实际的典范.并且很多工程师一辈子都不 ...
- 在CentOS 7中安装与配置Tomcat-8方法
安装前提 在CentOS 7中安装与配置JDK8 安装tomcat apache-tomcat-8.0.14.tar.gz文件上传到/usr/local中执行以下操作: [root@localhos ...
- USACO Section 3.1: Agri-Net
minimal spanning tree的经典题 /* ID: yingzho1 LANG: C++ TASK: agrinet */ #include <iostream> #incl ...