ACM-售货员难题
输入
村庄数n和各村之间的路程(均是整数)。
输出
最短的路程
样例输入
3 {村庄数}
0 2 1 {村庄1到各村的路程}
1 0 2 {村庄2到各村的路程}
2 1 0 {村庄3到各村的路程}
样例输出
3 思路:就是DFS,但是减枝比较麻烦,还可以用DP。 这种写法超时!!!
// 售货员的难题.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std; const int MAX = ;
int n, ans, vis[MAX], map[MAX][MAX]; void DFS(int pos, int sum, int cnt)
{
//cout << "pos:" << pos << "\tsum:" << sum << "\tcnt:" << cnt << endl;
if (cnt == n)
{
//cout << "===========end============:" << "sum:" << sum << "\tans:" << ans << endl;
sum += map[pos][];
ans = min(sum, ans);
return;
}
if (sum > ans) return;
for (int i = ; i < n; i++)
{
if (!vis[i])
{
if (sum + map[pos][i] > ans) continue;
vis[i] = ;
DFS(i, sum + map[pos][i], cnt + );
vis[i] = ; }
} } int main()
{
memset(vis, , sizeof(vis));
memset(map, , sizeof(map));
ans = 0x3f3f3f3f; string str;
cin >> n;
getline(cin, str);
for (int i = ; i < n; i++)
{
for (int j = ; j < n; j++)
cin >> map[i][j];
getline(cin, str); } vis[] = ;
DFS(, ,); cout << ans << endl; return ;
}
预处理一下就好了。
#include<iostream>
#include<cstdio>
using namespace std;
int n, g[][], r[][], f[], ans = 0x7fffffff;
void Dfs(int now, int sum, int dis)
{
if (dis + r[now][] >= ans)return; //如果最小距离仍然大于最优解,直接减枝
if (dis>ans)return;
if (sum == n)
{
ans = min(ans, dis + g[now][]);
return;
}
for (int i = ; i <= n; i++)
if (f[i] == )
{
f[i] = ; Dfs(i, sum + , dis + g[now][i]); f[i] = ;
}
}
int main()
{
scanf("%d", &n);
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
scanf("%d", &g[i][j]), r[i][j] = g[i][j];
for (int k = ; k <= n; k++)
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
r[i][j] = min(r[i][j], r[i][k] + r[j][k]); //计算两点之间的最小距离
f[] = ;
Dfs(, , );
printf("%d\n", ans);
return ;
}
ACM-售货员难题的更多相关文章
- ACM:统计难题 解题报告-字典树(Trie树)
统计难题 Time Limit:2000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64u Submit Status ...
- [swustoj 411] 售货员的难题
售货员的难题(0411) Time limit(ms): 5000 Memory limit(kb): 65535 Submission: 1744 Accepted: 200 Description ...
- [ACM] hdu 1251 统计难题 (字典树)
统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...
- P1171 售货员的难题
P1171 售货员的难题 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0< ...
- codevs 2596 售货员的难题
2596 售货员的难题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某乡有n个村庄(1<n<=15),有一个售货 ...
- 洛谷P1171 售货员的难题
P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...
- codevs2596 售货员的难题(状压dp)
2596 售货员的难题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某乡有n个村庄(1<n<=15 ...
- 洛谷 P1171 售货员的难题
P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...
- [LSGDOJ 1505]售货员的难题 状压DP
题目描述 某 乡有n个村庄(1<n<15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村 到B村与B村到A村的路大多不同.为了提高 ...
- P1171 售货员的难题--搜索(剪枝)
题目背景 数据有更改 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0<s ...
随机推荐
- HDU 5506:GT and set bitset+暴力
GT and set Accepts: 35 Submissions: 194 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- Keras入门——(4)长短期记忆网络LSTM(一)
参考: https://blog.csdn.net/zwqjoy/article/details/80493341 https://blog.csdn.net/u012735708/article/d ...
- 3.8.1 HTML与CSS简单页面效果实例
HTML与CSS简单页面效果实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 检测皮肤PH值、感知你的便意,健康是可穿戴设备的新风口?
在经历最初的喧嚣与疯狂后,可穿戴设备近年来有些低调和沉寂.换句话说,虽然可穿戴设备销量在持续走高,但从形态和功能上,呈现出高度一致性.这似乎也在证明着,可穿戴设备已成为寻常可见的普通产品而已.不过在迈 ...
- 信号强度(RSSI)知识整理
来源: https://www.cnblogs.com/lele/articles/2832885.html 为什么无线信号(RSSI)是负值 答:其实归根到底为什么接收的无线信号是负值,这样子是不是 ...
- jQuery父级以及同级元素查找的实例
父级以及同级元素的查找在使用过程中还是蛮频繁的,下面为大家介绍下jQuery是如何实现的,感兴趣的朋友可以参考下 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$( ...
- Java 8 Stream 的终极技巧——Collectors 操作
1. 前言 昨天在 Collection移除元素操作 相关的文章中提到了 Collectors .相信很多同学对这个比较感兴趣,那我们今天就来研究一下 Collectors . 2. Collecto ...
- Windows7 wampServer3.0.6 Mutillidae2.7.12
在Mac上访问虚拟机中的mutillidae,报403: By default, Mutillidae only allow access from localhost ***: Parallels ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:字符编码与对象序列化
public class CharSetDemo01{ public static void main(String args[]){ System.out.println("系统默认编码: ...
- STM32学习笔记:创建工程模板
STM32作为一类高级单片机,在应用中不容小觑. 所以本人从2018年1月1日开始对于STM32系列单片机的学习. 本人所持的型号为:STM32F429ZI-DISCOVERY,M4内核,封装类型为: ...