题意:要求用三辆车往n座城市投递货物,起点都在一号城市,每辆车可以载任意数量的货物,投递顺序必须与城市编号递增序一致,并且,每次同时都只能有一辆车在跑路。求最短总路径之和。

思路:每时每刻,能够充分决定三辆车状态的变量即为三辆车的所在城市,因此,可以以三辆车所在城市为变量确立状态,可建立如下状态转移方程:

  dp[i][j][k]=min(dp[i][j][k],dp[i+1][j][k]+g[i][i+1],dp[i+1][i][k]+g[j][i+1],dp[i+1][i][j]+g[k][i+1]);

  对于该方程

    1.首先,i表示此时状态所到达的最大城市编号,j,k为其余两车所在城市

    2.采用倒序状态转移,即由dp[n][j][k]逐步转移到dp[1][1][1]

    3.三辆车完全相同,因此不需要考虑其顺序,某一时刻三辆车所处城市编号从大到小依次是i,j,k时,下一步可能是j->i+1,i->i+1,k->i+1.

代码如下:

  

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int t, n;
int g[][], dp[][][]; int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
memset(dp, 0x3f, sizeof(dp));
for (int i = ; i < n; i++)
{
for (int j = i + ; j <= n; j++)
{
scanf("%d", &g[i][j]);
g[j][i] = g[i][j];
}
}
/*for (int j = 1; j <= n; j++)
for (int i = 1; i <= n; i++)
for (int k = 1; k <= n; k++)
g[i][k] = min(g[i][j] + g[j][k], g[i][k]);*/
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
dp[n][i][j] = ;
for (int i = n - ; i >= ; i--)
{
for (int j = ; j == || j < i; j++)
{
for (int k = ; k == || k < j; k++)
{
dp[i][j][k] = min(dp[i][j][k], dp[i + ][j][k] + g[i][i + ]);
dp[i][j][k] = min(dp[i][j][k], dp[i + ][i][k] + g[j][i + ]);
dp[i][j][k] = min(dp[i][j][k], dp[i + ][i][j] + g[k][i + ]);
}
}
}
int ans = 0x3f3f3f3f;
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
ans = min(ans, dp[][][]);
printf("%d\n", dp[][][]);
}
return ;
}

By xxmlala

Magazine Delivery(POJ1695)【DP】的更多相关文章

  1. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  2. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  3. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  4. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  5. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  6. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  7. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  8. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

  9. LeetCode:零钱兑换【322】【DP】

    LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...

随机推荐

  1. 微信打开手机内置浏览器跳转手机默认浏览器打开html网页

    微信上进行的网页宣传.游戏传播.APP下载各类活动很多,但是各位朋友肯定经常会遇到一些特殊需求,网页需要在手机默认浏览器打开而不是微信内置浏览器.这个问题怎么解决呢? 斗在微信营销的浪潮中 解决方案: ...

  2. Codeforces 1238E. Keyboard Purchase

    传送门 注意到 $m$ 只有 $20$ ,考虑一下状压 $dp$ 设 $f[S]$ 表示当前确定的字符集合为 $S$ ,那么转移就考虑从最右边加入的下一个字符 $c$ 那么问题来了,代价如何计算 考虑 ...

  3. 【分类模型评判指标 一】混淆矩阵(Confusion Matrix)

    转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839 略有改动,仅供个人学习使用 简介 混淆矩阵是ROC曲线绘制的基础 ...

  4. Redis | Redis基础都不会,好意思出去面试?

    Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景. 五种基础数据结构 String:字符串,是构建其他数据结构的基础 ...

  5. 对于ssh服务的简单配置,似的自己的服务器更加安全

    对于一台服务器,最大的问题莫过于安全.没有安全性的服务器即使再牛*,性能再好,作用再大,也是分分钟被人搞定,而且还是揉虐性的...当然万事没有绝对的安全,我们只是将危险降低而已.本文只针对于ssh服务 ...

  6. Android 电量优化

    Android系统上App的电量消耗主要由cpu.wakelock.数据传输(流量和wifi).wifi运行.gps.other senior组成,而耗电异常也是由于这几个模块的使用不当. Broad ...

  7. Hibernate3核心API简介-Transaction接口

    代表一次原子操作,它具有数据库事务的概念.所有持久层都应该在事务管理下进行,即使是只读操作.    Transaction tx = session.beginTransaction();常用方法:c ...

  8. java错误与异常

    java异常处理机制 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常, 让程序尽最大可能恢复正常并继续执行,且保持代码的清晰.Java中的异常可以是函数中的语句执 ...

  9. vue3.x版本安装element-ui、axios及echarts图表插件

    项目中安装使用element-UI 命令行: vue add element 安装成功后,项目会自动将element-UI引入项目中,刷新项目即可 项目中安装使用axios数据请求 vue add a ...

  10. 由DBCursor的“can't switch cursor access methods”异常引发的思考

    先谈谈我是怎么用的: DBCollection dbcollection = XXXXXXXXXX(); //连接mongo DBCursor dbCursor = mergeVideoDB.find ...