Free DIY Tour HDU1224
一道很好的dfs加储存路径的题目 :路径保存:每次dfs都存i 当大于max时 将临时数组保存到答案数组
并不是当 当前值大于最大值时更新路径
还要加上一个条件:能回去
#include<bits/stdc++.h>
using namespace std;
int n;
int m1[][];
int valu[];
int ans[];int path[];
int maxi,len; void dfs(int stepn,int sum,int cur)
{ for(int i=cur+;i<=n;i++)
{
if(m1[cur][i])
{
path[stepn]=i; if(m1[i][n+])
{ path[stepn+]=;
if(sum+valu[i]>maxi)
{
maxi=sum+valu[i];
len=stepn+;
for(int j=;j<=len;j++)
{
ans[j]=path[j];
} } } dfs(stepn+,sum+valu[i],i);
} } } int main()
{ int cas;scanf("%d",&cas);int case1=;
while(cas--)
{
maxi=; len=;
ans[]=;
memset(m1,,sizeof(m1)); scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&valu[i]); valu[]=valu[+n]=; int q;
scanf("%d",&q);
while(q--)
{
int a,b;
scanf("%d%d",&a,&b);
m1[a][b]=m1[b][a]=; } if(case1!=)
printf("\n");
printf("CASE %d#\n",case1++); dfs(,,); printf("points : %d\n",maxi);
if(len!=)
{
printf("circuit : ");
for(int i=;i<len;i++)
printf("%d->",ans[i]);
printf("%d\n",ans[len]); } } return ;
}
还可以用dp来做
#include <stdio.h>
#include <string.h>
bool link[][];
int intrest[], dp[], last[], path[];
int main()
{
int t, case_num = ;
//freopen("input.txt", "r", stdin);
scanf("%d", &t);
while(t--)
{
int n, m, i, j;
memset(link, , sizeof(link));
memset(dp, , sizeof(dp));
last[] = ; //last记录上一个走的城市的标号,last[1] = 0是为了让追溯到第一个城市之后就不继续追溯了
scanf("%d", &n);
if(case_num != )
printf("\n");
for(i = ; i <= n; i++)
{
scanf("%d", &intrest[i]);
}
intrest[i] = ; //注意i城市有趣度为0!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
scanf("%d", &m);
for(int i = ; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
link[a][b] = link[b][a] = ;
}
for(i = ; i <= n+; i++) //假设目标城市标号为i(注意到达它之前经过的城市的标号都小于它)
{
for(j = ; j < i; j++)
//遍历到达i城市之前所在的城市的标号的所有可能性,
//更新到达i城的时候的有趣度之和为所有情况中最大的
{
if(dp[j]+intrest[i] > dp[i] && link[i][j])
{
dp[i] = dp[j]+intrest[i];
last[i] = j;
}
}
}
j = ;
i = n+;
while(last[i])
{
path[j++] = last[i];
i = last[i];
}
printf("CASE %d#\n", case_num++);
printf("points : %d\n", dp[n+]);
printf("circuit : ");
for(i = j-; i >= ; i--)//注意输出的个数并非为城市数目!!!!!!!!!!!!!
{
printf("%d->", path[i]);
}
printf("1\n");
}
return ;
}
回顾
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std; #define N 105
#define inf 0x3f3f3f3f int ans[N];
int path[N];
int n,maxx;
int mp[N][N];
int city[N];
int len; void dfs(int cur,int interest,int num)
{
for(int i=cur+;i<=n;i++)
{
if(mp[cur][i])
{
int t=interest+city[i];
path[num]=i;
if(t>maxx&&mp[i][n+])
{ maxx=t;
for(int i=;i<=num;i++)
ans[i]=path[i];
len=num;
}
dfs(i,t,num+);
}
}
} int main()
{
int cas;cin>>cas;
for(int kase=;kase<=cas;kase++)
{
memset(mp,,sizeof mp);
scanf("%d",&n); for(int i=;i<=n;i++)
scanf("%d",&city[i]);
city[n+]=city[]=; int m,a,b;
cin>>m;
while(m--)
{
scanf("%d%d",&a,&b);
mp[a][b]=mp[b][a]=;
}
path[]=;
maxx=;
dfs(,,); if(kase!=)printf("\n");
printf("CASE %d#\n",kase);
printf("points : %d\ncircuit : ",maxx);
for(int i=;i<=len;i++)
printf("%d->",ans[i]);
printf("%d\n",);
}
}
Free DIY Tour HDU1224的更多相关文章
- 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 ...
- 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 ...
- 动态规划:HDU1224-Free DIY Tour
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 【dfs or 最短路】【HDU1224】【Free DIY Tour】
路径只能由小序号到大序号..(起点可以视为最小的序号和最大的序号) 问怎么走 happy值最大.. DFS N=100 且只能小序号到大序号 显然dfs可以过.. 但是存路径的时候sb了.....应该 ...
- F - Free DIY Tour(动态规划,搜索也行)
这道题可用动态规划也可以用搜索,下面都写一下 Description Weiwei is a software engineer of ShiningSoft. He has just excelle ...
- HDU1224-Free DIY Tour(SPFA+路径还原)
Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project w ...
- HDU 1224 Free DIY Tour
题意:给出每个城市interesting的值,和城市之间的飞行路线,求一条闭合路线(从原点出发又回到原点) 使得路线上的interesting的值之和最大 因为要输出路径,所以用pre数组来保存前驱 ...
- 【HDOJ】1224 Free DIY Tour
DP. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm ...
- hdu Free DIY Tour
http://acm.hdu.edu.cn/showproblem.php?pid=1224 #include <cstdio> #include <cstring> #inc ...
随机推荐
- Android ThreadPool
在Android开发中,如果我们要执行某个耗时任务,一般都会考虑开启一个线程去处理. 一个线程run方法执行完毕后,才算真正结束:但是,这只是结束,并没有被回收:会一直闲置在那里,等待GC去回收.所以 ...
- 蒙特卡罗定位(Particle Filter Localization)笔记
善始善终,这篇文章是Coursera课程Robotics: Estimation and Learning最后一周的课程总结.里面的小哥讲得不是很清晰,留下的作业很花功夫(第二周课程也是酱紫). 这周 ...
- np.mat()和np.transpose
例子: import numpy as np dataSet = [] with open('/home/lai/下载/20081023025304.plt') as fr: for line in ...
- 分布式系列 - dubbo服务telnet命令【转】
dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的d ...
- vss 日文文件路径的名字在中文系统下乱码
解决方式:tools-font 文字设置 日本語
- STOMP Over WebSocket
Show Table of Contents What is STOMP? STOMP is a simple text-orientated messaging protocol. It defin ...
- centos 命令和
一.远程工具 Window系统上 Linux 远程登录客户端有SecureCRT, Putty, SSH Secure Shell.TightVNC... 重点推荐一款 FinallShell,一般人 ...
- Android中PopupWindow用法
参考资料链接:http://developer.android.com/reference/android/widget/PopupWindow.html 在Android中有很多级别的Window, ...
- 将数据库从Oracle迁移到SQL Server
参考链接:http://www.360doc.com/content/15/0310/14/9260775_454038517.shtml
- 《MATLAB Deep Learning:With Machine Learning,Neural Networks and Artificial Intelligence》选记
一.Training of a Single-Layer Neural Network 1 Delta Rule Consider a single-layer neural network, as ...