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 ...
随机推荐
- CSS——超链接颜色设置
<!-- 链接颜色 --> a:link { color:#FF0000; text-decoration:underline; } a:visited { color:#00FF00; ...
- centos7 网卡命名
CentOS6 及之前以太网网卡进行顺序命名的:多网卡如:eth0,eth1 依次.Centos7 则不同,命名规则默认是基于固件.拓扑.位置信息来分配.一.网卡命名的策略systemd对网络设备的命 ...
- 3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 利用栈“先进后出”的性质,将链表的值存入到栈里,然后将栈里的值存入到构建好的容器里,最后打印容器. class So ...
- DSO windowed optimization 公式
这里有一个细节,我想了很久才想明白,DSO 中的 residual 联系了两个关键帧之间的相对位姿,但是最终需要优化帧的绝对位姿,中间的导数怎么转换?这里使用的是李群.李代数中的Adjoint. 参考 ...
- ubuntu14.04 安装 openssh-server
ubuntu自带的有openssh-client,所以可以通过 ssh username@host 来远程连接linux 可是要想通过ssh被连接,ubuntu系统需要有openssh-server, ...
- SpringBoot集成监控管理
(1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- k64 datasheet学习笔记3---Chip Configuration之Clock modules
1.前言 本文主要讲述chip configure之clock配置相关的内容,主要包含如下三个部分: MCG configuration:Multipurpose clock generator OS ...
- 技巧:Vim 的纵向编辑模式【转】
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 张 曜民 和 卢 丹2011 年 2 月 18 日发布 WeiboGoog ...
- VC++常用数据类型
原文地址:https://www.cnblogs.com/yincheng01/archive/2008/12/31/2213386.html 一. VC常用数据类型列表 二 ...
- dubbo 一个接口多个实现
<dubbo:service ref="dubboGroupService1" interface="com.yncp.dubbo.service.IDubboGr ...