bzoj4244 邮戳拉力赛 动态规划
2016-03-26 20:38
183 查看
感觉自己dp这方面还需要加强啊。
显然一个合法的方案已定包含一条0-N+1的上行链(可以拼接得到),剩下的是一些环。
令dp[i][j]表示盖了前i个邮戳,并且从下行站走到上行站的次数-从上行站走到下行站的次数=j时,不计0-i的上行链的时间时的最小耗费。
j可能比较费解。形象一点,由于剩下的是一些环,那么环一定是i的上行站->i的下行站->j的下行站->i的下行站->i的上行站。环一定是有些整体在i的前面,或者整体在i的后面,或者跨过i,j就是跨过i的环的数量。
然后枚举第i个站点的走法:(上行站或下行站)->邮戳台->(下行站或下行站)共四种;再加上直接从上行站->下行站(包括反向)的转移。因此一共是六种。
AC代码如下:
by lych
2016.3.26
显然一个合法的方案已定包含一条0-N+1的上行链(可以拼接得到),剩下的是一些环。
令dp[i][j]表示盖了前i个邮戳,并且从下行站走到上行站的次数-从上行站走到下行站的次数=j时,不计0-i的上行链的时间时的最小耗费。
j可能比较费解。形象一点,由于剩下的是一些环,那么环一定是i的上行站->i的下行站->j的下行站->i的下行站->i的上行站。环一定是有些整体在i的前面,或者整体在i的后面,或者跨过i,j就是跨过i的环的数量。
然后枚举第i个站点的走法:(上行站或下行站)->邮戳台->(下行站或下行站)共四种;再加上直接从上行站->下行站(包括反向)的转移。因此一共是六种。
AC代码如下:
#include<iostream> #include<cstdio> #include<cstring> #define N 3005 using namespace std; int n,m; long long f ; void dn(int &x,int y){ if (y<x) x=y; } int main(){ scanf("%d%d",&n,&m); int i,j,x,y,u,v; memset(f,0x3f,sizeof(f)); f[0][0]=0; for (i=1; i<=n; i++){ scanf("%d%d%d%d",&x,&y,&u,&v); for (j=0; j<=n; j++) f[i-1][j]+=j*m<<1; for (j=0; j<=n; j++){ if (j) f[i][j]=min(min(f[i-1][j-1],f[i][j-1])+y+u,f[i-1][j]+u+v); if (j<n) f[i][j]=min(f[i][j],f[i-1][j+1]+x+v); f[i][j]=min(f[i][j],f[i-1][j]+x+y); } for (j=n-1; j>=0; j--) f[i][j]=min(f[i][j],f[i][j+1]+x+v); } printf("%lld\n",f [0]+(n+1)*m); return 0; }
by lych
2016.3.26
相关文章推荐
- 关联引用的使用方法
- 展示图片的自动和手动切换
- 矩阵快速幂 ZOJ 3497 Mistwald
- 表空间
- 异常处理方法
- json 数组对象 取值
- 常见图表元素
- Android开源库
- 【BZOJ1005】【HNOI2008】明明的烦恼
- Wolfram Mathematic流程控制
- 比较经典的中断串口接收方法
- Java静态内部类,普通内部类的理解
- 从此不求人:自主研发一套PHP前端开发框架(7)
- Java——UDP
- tableview懒加载崩溃
- 数据分析文件操作的命令行
- 表管理
- 第四次上机实践项目-项目1-三角形类锥形-(2)
- C++作业2
- Yii CGridView 基本使用(三)关联表相关字段搜索