题意:n个点,给定起点和终点,可以每次可以走一格或两格,走一格则需要一个代价,每个格子只能走一次,问从起点到终点并经过每一个点的最小代价

思路:这题我没看出什么道理,先打了个暴力,结果发现了个相当坑的规律,,然后就过了。

 #include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define LL long long
#define eps 1e-8
#define INF 0x3f3f3f3f
#define MAXN 200005
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif // OPEN_FILE
int n, s, t, o;
while(~scanf("%d%d%d", &n, &s, &t)){
//printf("%d %d %d %d ", n, s, t, o);
int ans;
if(s == t){
ans = ;
}
else{
if(s > t){
swap(s, t);
}
if(t - s == ){
if(s != && t != n){
ans = -;
}
else{
ans = ;
}
}
else{
int tt = n -s + ;
int ss = n - t + ;
if(ss < s){
s = ss;
t = tt;
}
int p;
if(s == ){
p = t - s - ;
ans = + p / + (p % );
}
else{
p = t - s - ;
ans = + p / + (p % );
}
}
}
if(s == && t == n && n % == ){
ans -= ;
}
printf("%d\n", ans);
}
/*while(~scanf("%d%d%d", &n, &s, &t)){
memset(vis, 0, sizeof(vis));
vis[s] = true;
vis[t] = true;
ans = INF;
dfs(s, 0, 0);
if(ans == INF){
printf("%d %d %d -1\n", n, s, t);
continue;
}
printf("%d %d %d %d\n", n, s, t, ans);
}*/
}

下面是暴力的

 #include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define LL long long
#define eps 1e-8
#define INF 0x3f3f3f3f
#define MAXN 200005
int n, s, t;
int ans;
bool vis[MAXN];
using namespace std;
void dfs(int x, int cnt, int cost){
if(cnt == n - ){
if(abs(x - t) == ){
ans = min(ans, cost + );
}
else if(abs(x - t) == ){
ans = min(ans, cost);
}
else{
return;
}
}
int y;
for(int i = ; i <= ; i++){
int p = i == ? : ;
y = x + i;
if(y >= && y <= n && !vis[y]){
vis[y] = true;
dfs(y, cnt + , cost + p);
vis[y] = false;
}
y = x - i;
if(y >= && y <= n && !vis[y]){
vis[y] = true;
dfs(y, cnt + , cost + p);
vis[y] = false;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // OPEN_FILE while(~scanf("%d%d%d", &n, &s, &t)){
memset(vis, , sizeof(vis));
vis[s] = true;
vis[t] = true;
ans = INF;
dfs(s, , );
if(ans == INF){
printf("-1\n");
return ;
}
printf("%d\n", ans);
}
}

最新文章

  1. python学习之路-day6-面向对象
  2. SQL Server锁定【2015.12.17】
  3. [转]oracle审计详解
  4. Linux进程通信之System V共享内存
  5. CoreText 实现图文混排
  6. java 简单的文件上传
  7. Java Scoket之java.io.EOFException解决方案
  8. qt example
  9. WEB标准了解
  10. 【alpha阶段】第一次Scrum Meeting
  11. Exp2 后门原理与实践 20164320 王浩
  12. git之commit
  13. ElasticSearch(十二)删除数据插件delete-by-query
  14. 电磁波、无线电、802、WLAN及WiFi的区别与联系
  15. Python机器学习(基础篇---监督学习(集成模型))
  16. jmeter操作数据库
  17. Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录
  18. 【Unity】通用的Debugger日志模块
  19. IDEA设置(含永久破解IDEA)
  20. tomcat 启动超级慢

热门文章

  1. Keepalived原理及VRRP协议与应用配置(详细)
  2. [转载]不唐突的JavaScript的七条准则
  3. VS2015--win32project配置的一些想法之cmake
  4. hdu 5277 YJC counts stars
  5. 5. MongoDB基本操作语句
  6. rest_framework-认证-总结完结篇
  7. BZOJ 球形空间产生器 解题报告(高斯消元)
  8. Java容器源码解析之——LinkedList
  9. C++字节对齐与结构体大小计算
  10. Swift学习笔记(3):基本运算符