putnik
2024-09-08 15:51:54
可将旅行商的路线看作是从n - 1号点出发, 跳着到0号点, 再折返走完之前跳过的点. 想到这个, 暴力就可以得50分.
正解是DP.
f[i][j](i > j)表示, 从i开始跳, 并返回至j所需要的最小花费(从定义上i, j可互换)
因而得到递推式:
f[i + 1][i] = min(f[i + 1][i], f[i][j] + w[j][i + 1])
f[i + 1][j] = min(f[i + 1][j], f[i][j] + w[i][i + 1])
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxN = 1500;
int w[maxN][maxN];
int f[maxN][maxN];
int main()
{
freopen("putnik.in", "r", stdin);
freopen("putnik.out", "w", stdout);
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
cin >> w[i][j];
memset(f, 127, sizeof(f));
f[0][0] = 0;
for(int i = 0; i < n; i ++)
for(int j = 0; j <= i; j ++)
if(f[i][j] < (int)2e9)
f[i + 1][i] = min(f[i + 1][i], f[i][j] + w[j][i + 1]),
f[i + 1][j] = min(f[i + 1][j], f[i][j] + w[i][i + 1]);
int ans = (int)2e9;
for(int i = 0; i < n; i ++)
ans = min(ans, f[n - 1][i]);
cout << ans;
}
最新文章
- C#开发微信门户及应用(12)-使用语音处理
- 使用Jmeter进行简单的http接口测试
- iOS文件操作
- 从OGRE,GAMEPLAY3D,COCOS2D-X看开源
- [搜片神器]服务器SQL2005查询分页语句你理解了么
- spoj 2148
- XML前言
- Lucene 实例教程(四)之检索方法总结
- 查看表结构命令(mysql和oracle)
- [UIKit学习]05.关于plist
- Nuxt框架实践
- 微信小程序中的rpx与移动设备物理像素
- 微服务下 Spring Boot Maven 工程依赖关系管理
- java-Set集合、HashSet集合、LinkedHashSet集合和TreeSet集合
- ftell
- php后台管理员权限相关表结构
- Objective-c官方文档 封装数据属性
- Task 6.4 冲刺Two之站立会议6
- swift学习笔记之---数组、字典、枚举、结构体
- 20145230熊佳炜《逆向及BOF基础实践》