每日一题 day21 打卡

Analysis

DP的状态为已经完成的请求数量,通过指派一位服务员
可以把”完成i - 1个请求的状态”转移到”完成i个请求的状态”
那么我们可以知道转移从dp[i - 1] -> dp[i]
dp[i][x][y][z] 代表为第i次选择的情况下,对应的1,2,3号服务员
所对应的位置
那么可以得知
dp[i][arr[i]][y][z] = min(dp[i][arr[i]][y][z], dp[i - 1][x][y][z] + cost[x][arr[i]])
dp[i][x][arr[i]][z] = min(dp[i][x][arr[i]][z], dp[i - 1][x][y][z] + cost[y][arr[i]])
dp[i][x][y][arr[i]] = min(dp[i][x][y][arr[i]], dp[i - 1][x][y][z] + cost[z][arr[i]])

因为肯定有一个位置,继承了上一个的位置
所以保存两个状态就可以了

三种状态转移 pi,x,y
dp[i][x][y] = min(dp[i][x][y], dp[i - 1][x][y] + cost[pi - 1][pi])
dp[i][pi][y] = min(dp[i][pi][y], dp[i - 1][x][y] + cost[x][pi])
dp[i][x][pi] = min(dp[i][x][pi], dp[i - 1][x][y] + cost[y][pi])

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxl 200+10
#define maxn 1000+10
#define INF 2147483647
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int l,n;
int c[maxl][maxl],p[maxn],dp[maxn][maxl][maxl];
signed main()
{
memset(dp,,sizeof(dp));
l=read();n=read();
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
c[i][j]=read();
for(int i=;i<=n;i++) p[i]=read();
dp[][][]=;
p[]=;
for(int i=;i<=n-;i++)
for(int x=;x<=l;x++)
for(int y=;y<=l;y++)
{
if(x==y||x==p[i]||y==p[i]) continue;
dp[i+][x][y]=min(dp[i+][x][y],dp[i][x][y]+c[p[i]][p[i+]]);
dp[i+][p[i]][y]=min(dp[i+][p[i]][y],dp[i][x][y]+c[x][p[i+]]);
dp[i+][x][p[i]]=min(dp[i+][x][p[i]],dp[i][x][y]+c[y][p[i+]]);
}
int ans=INF;
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
ans=min(ans,dp[n][i][j]);
write(ans);
return ;
}

请各位大佬斧正(反正我不认识斧正是什么意思)

最新文章

  1. Azure ARM (14) 设置ARM VM的Availability Set
  2. jquery打造自定义控件(原创)
  3. gulp使用引导
  4. 安装rpm包
  5. 编写运行R脚本
  6. 支持nmap批量漏洞扫描的script
  7. 基于AE连通性分析
  8. IOS 疑问记录
  9. CentOS安装XRDP实现远程桌面访问
  10. sysfs接口函数到建立_DEVICE_ATTR
  11. 解决Ubuntu 16.04 软件中心闪退
  12. WebSocket(3)---实现一对一聊天功能
  13. [BZOJ 4818] [SDOI 2017] 序列计数
  14. 【微信小游戏】【提审的坑】!#¥%&amp;……&amp;&amp;……%¥#@@*()()&amp;%%¥
  15. Paper/ Overview | CNN(未完待续)
  16. jdk-tomcat-jenkens 安装
  17. python编码(二)
  18. FFmpeg编写的代码
  19. pytest mark中的skip,skipif, xfail
  20. Java线程等待与唤醒

热门文章

  1. python 之 Django框架(服务器程序和应用程序、基础必备三件套及相关配置)
  2. mongdb基本使用
  3. 基于 Docker 和 GitLab 的前端自动化部署实践笔记
  4. Pycharm下直接升级库所遇到的&#39;main&#39;问题
  5. CF1097G Vladislav and a Great Legend 组合、树形背包
  6. caffe基础入门
  7. 分享大麦UWP版本开发历程-02.内容“高度/宽度”不同的列表展示
  8. 【POJ3613 Cow Relays】(广义矩阵乘法)
  9. ActiveMQ Topic持久化订阅的几点收获
  10. JavaScript常用数组操作方法,包含ES6方法