【dfs or 最短路】【HDU1224】【Free DIY Tour】
路径只能由小序号到大序号..(起点可以视为最小的序号和最大的序号) 问怎么走 happy值最大..
DFS
N=100 且只能小序号到大序号 显然dfs可以过..
但是存路径的时候sb了.....应该在更新答案时拿一个ans_dis数组去全部存一遍路径...
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=105;
const int inf=-0x3f3f3f3f;
int w[maxn];
int dis[maxn];
struct edge
{
int to;
edge *next;
}E[maxn*maxn],*EE;
struct node
{
edge *frist;
}Graph[maxn];
int N,M;
int pre[maxn];
void Link(int u,int v)
{
EE->to=v;EE->next=Graph[u].frist;Graph[u].frist=EE++;
// EE->to=u;EE->next=Graph[v].frist;Graph[v].frist=EE++;
}
void input()
{
cin>>N;
memset(Graph,0,sizeof(Graph));
memset(pre,0,sizeof(pre));
memset(dis,0,sizeof(dis));
EE=E;
for(int i=1;i<=N;i++)
{
scanf("%d",&w[i]);
}
cin>>M;
int a,b;
for(int i=1;i<=M;i++)
{
scanf("%d%d",&a,&b);
if(b==N+1) b=1;
if(a==N+1) a=1;
Link(a,b);
}
}
int ans=-1;
int dfs(int P,int n,int ok,int W)
{
pre[n]=P;
if(ok==1&&n==1)
{
if(W>ans)
{
int p=pre[n];
dis[n]=pre[n];
while(p!=1)
{dis[p]=pre[p];p=pre[p];}
ans=W;
}
return 0;
}
else
{ for(edge *p=Graph[n].frist;p;p=p->next)
{
if(p->to>n||p->to==1){dfs(n,p->to,1,W+w[n]);}
}
}
}
void output(int n,int ok)
{
if(n==1&&ok==1)
{
printf("%d",n);
}
else {
output(dis[n],1);
printf("->%d",n);
}
}
int CASE=0;
int T;
void solve()
{
ans=inf;
dfs(0,1,0,0);
printf("%d\n",ans);
printf("circuit : ");
output(1,0);
printf("\n");
if(T!=0) printf("\n");
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
} int main()
{
// init(); cin>>T;
while(T--)
{
printf("CASE %d#\n",++CASE);
printf("points : ");
input();
solve();
}
return 0;
}
最短路
Floyd
利用floyd..在循环的时候修改一下循环次数即可
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=105;
const int inf=-0x3f3f3f3f;
int T;
int N,M;
int w[maxn];
int MAP[maxn][maxn];
int F[maxn][maxn];
int dis[maxn][maxn];
void input()
{
memset(MAP,0,sizeof(MAP));
memset(dis,0,sizeof(dis));
int a,b;
cin>>N;
for(int i=1;i<=N;i++)
{
scanf("%d",&w[i]);
w[i]=-w[i];
}
w[N+1]=0;
cin>>M;
for(int i=1;i<=M;i++)
{
scanf("%d%d",&a,&b);
MAP[a][b]=1;
}
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
{
F[i][j]=-inf;
if(MAP[i][j]==1)
F[i][j]=0;
}
}
void floyed()
{
for(int i=1;i<=N+1;i++)
for(int j=1;j<=N+1;j++)
dis[i][j]=j;
for(int k=1;k<=N+1;k++)
for(int i=1;i<k;i++)
for(int j=k+1;j<=N+1;j++)
{
if(F[i][k]+F[k][j]+w[k]<F[i][j])
{
F[i][j]=F[i][k]+F[k][j]+w[k];
dis[i][j]=dis[i][k];
}
}
printf("points : %d\n",-F[1][N+1]);
printf("circuit : ");
for(int p=1;1;p=dis[p][N+1])
{
if(p==N+1){printf("1");break;}
else{
printf("%d->",p);
}
}
printf("\n");
if(T!=0) printf("\n"); }
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main()
{
int CASE=0;
// init();
cin>>T;
while(T--)
{
printf("CASE %d#\n",++CASE); input();
floyed();
}
}
【dfs or 最短路】【HDU1224】【Free DIY Tour】的更多相关文章
- 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) ...
- Free DIY Tour HDU1224
一道很好的dfs加储存路径的题目 :路径保存:每次dfs都存i 当大于max时 将临时数组保存到答案数组 并不是当 当前值大于最大值时更新路径 还要加上一个条件:能回去 #include<bi ...
- HDU 1224 Free DIY Tour - 最短路
传送门 题目大意: 一个有向图(n + 1相当于1),每个点有一个权值(可以认为1和n+1权值为0),求从1走到n+1(相当于走回1)的最大路径权值和是多少,输出方案. 题目分析: 最短路问题,输出方 ...
- F - Free DIY Tour(动态规划,搜索也行)
这道题可用动态规划也可以用搜索,下面都写一下 Description Weiwei is a software engineer of ShiningSoft. He has just excelle ...
- pat1003 迪杰斯特拉法和dfs求最短路
本题的背景是求定点和定点之间的最短路问题(所有的最短路 不是一个解 是全部解,方法手段来自数据结构课程中的迪杰斯特拉算法和dfs(深度优先遍历). 分别用两种方法编程如下代码 dfs #includ ...
- HDU1224-Free DIY Tour(SPFA+路径还原)
Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project w ...
- A - Free DIY Tour HDU - 1224
题目大意:每一个城市都有一定的魅力值,然后有一个有向图,根据这个有向图从1到n+1所获得的魅力的最大值,并输出路径(要求只能从编号娇小的城市到编号较大的城市). 题解:很容易想到最短路+路径纪录.但是 ...
随机推荐
- 华为Java笔试题
华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...
- [置顶] Hibernate从入门到精通(五)一对一单向关联映射
上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...
- Android Studio代码自己主动提示无效(not available in Power Save mode)
针对一位博友提的问题,我这边写出来,预计还是非常多人会碰到这个问题,可是不知道怎样解决的. 就是在设置了代码自己主动提示功能后,发现不生效的,怎样设置代码自己主动提示请戳这:Android Studi ...
- DWZ主从结构计算
最终效果图: 首先我们需要修改一下主从结构的源码dwz.database.js,如下: function tdHtml(field){ var html='',suffix=''; if(field. ...
- Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7867340 在前面一篇文章中,我们分析了And ...
- ASCII码表完整版
ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 A 97 a ...
- 关于textField
如果想给textField设置背景图片,首先设置该控件的bounder Style为最左边的无style,然后设置背景图片 如果设置textField弹出键盘 的发送按钮:设置右侧Return K ...
- ProxyCreationEnabled 和 LazyLoadingEnabled 的关系
我们会使用这两个设置来决定是否加载导航属性.默认情况这两个值都是true的,也就是说会以延迟加载的方式加载导航属性,也就是当我们访问导航属性的时候才会去查数据库获取导航属性的数据.db.Configu ...
- c语言字符串比较函数strcmp
strcmp(s1,s2) 说明: 当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0两个字符串自左向右逐个字符相比(按ASCII值大小相比较) ...
- Java-----隐藏手机号中间四位
phone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");152****4799 idCard.replace ...