\(Sol\)

约定\(pos\)为老张所处的位置的路灯号,\(i<pos,j>pos\).

显然,如果\(i\)和\(j\)都关了,那么它们之间的所有灯一定也都关了.

设\(f[i][j][k]\)表示关掉\([i,j]\)的灯,现在在\(k\)位置(\(k=i\)或\(k=j\)),所有路灯的功耗.

转移有两种,显然,懒得写了.

记搜即可.

\(Code\)

写得挺复杂的,感觉都可以评上最长代码了.

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define db double
  10. #define inf 2147483647
  11. using namespace std;
  12. il int read()
  13. {
  14. Ri x=0,y=1;char c=getchar();
  15. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  16. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  17. return x*y;
  18. }
  19. const int N=60;
  20. int n,c,sw[N],s[N],as,rem[N][N][N];
  21. struct nd{int p,w;}a[N];
  22. il int sol(Ri l,Ri r,Ri p)
  23. {
  24. Ri ret=0;
  25. if(rem[l][r][p])return rem[l][r][p];
  26. if(l==c)
  27. {
  28. go(i,l+1,r)ret+=s[i];;ret+=(sw[n]-(sw[r]-sw[l-1]))*(a[r].p-a[l].p);
  29. if(p==c)ret+=(sw[n]-(sw[r]-sw[l-1]))*(a[r].p-a[l].p);
  30. return rem[l][r][p]=ret;
  31. }
  32. if(r==c)
  33. {
  34. go(i,l,r-1)ret+=s[i];;ret+=(sw[n]-(sw[r]-sw[l-1]))*(a[r].p-a[l].p);
  35. if(p==c)ret+=(sw[n]-(sw[r]-sw[l-1]))*(a[r].p-a[l].p);
  36. return rem[l][r][p]=ret;
  37. }
  38. if(p==l)
  39. {
  40. ret=sol(l+1,r,l+1)+(sw[n]-(sw[r]-sw[l]))*(a[l+1].p-a[l].p);
  41. ret=min(ret,sol(l+1,r,r)+(sw[n]-(sw[r]-sw[l]))*(a[r].p-a[l].p));
  42. }
  43. else
  44. {
  45. ret=sol(l,r-1,l)+(sw[n]-(sw[r-1]-sw[l-1]))*(a[r].p-a[l].p);
  46. ret=min(ret,sol(l,r-1,r-1)+(sw[n]-(sw[r-1]-sw[l-1]))*(a[r].p-a[r-1].p));
  47. }
  48. return rem[l][r][p]=ret;
  49. }
  50. int main()
  51. {
  52. n=read(),c=read();
  53. go(i,1,n)
  54. a[i]=(nd){read(),read()},sw[i]=sw[i-1]+a[i].w;
  55. go(i,1,n)s[i]=abs(a[i].p-a[c].p)*a[i].w;
  56. as=min(sol(1,n,1),sol(1,n,n));
  57. printf("%d\n",as);
  58. return 0;
  59. }

洛谷$1220$ 关路灯 记搜/$DP$的更多相关文章

  1. 洛谷P1220 关路灯 题解 区间DP

    题目链接:https://www.luogu.com.cn/problem/P1220 本题涉及算法:区间DP. 我们一开始要做一些初始化操作,令: \(p[i]\) 表示第i个路灯的位置: \(w[ ...

  2. 洛谷P1220 关路灯

    洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关 ...

  3. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  4. 洛谷P1220 关路灯(区间dp)

    关路灯 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.为了给村里节 ...

  5. 洛谷——P1220 关路灯

    P1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉 ...

  6. 「LuoguP1220」 关路灯(区间dp

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  7. 洛谷P1220关路灯[区间DP]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  8. 洛谷 P1220 关路灯 区间DP

    题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...

  9. 洛谷P1220关路灯——区间DP

    题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...

随机推荐

  1. Linux Shell 教程

    Shell 教程 Shell 是一个C语言编写的程序,他是用户使用Linux的桥梁,Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面用户通 ...

  2. part10.3-字符驱动访问揭秘

  3. UISearchDisplayController “No Results“ cancel修改

    Recently I needed to fully customize a UISearchBar, so here are some basic "recipes" on ho ...

  4. 学习canvas画布

    我们可以用画布(Canvas)绘制各种图形,下面代码是绘制的一个圆形: <!DOCTYPE html> <html> <head> <title>Can ...

  5. vue2——指令渲染,{{}}渲染

    博客地址 :https://www.cnblogs.com/sandraryan/ 声明式的渲染,以{{}}的形式调用数据 <!DOCTYPE html> <html lang=&q ...

  6. hdu 3982 Harry Potter and J.K.Rowling (半平面交 + 圆与多边形交)

    Problem - 3982 题意就是给出一个圆心在原点半径为R的圆形蛋糕,上面有一个cherry,对蛋糕切若干刀,最后要求求出有cherry的那块的面积占整个蛋糕的多少. 做法显而易见,就是一个半平 ...

  7. 【Activiti工作流引擎】官方快速入门demo

    Activiti官方快速入门demo 地址: https://www.activiti.org/quick-start 0. 版本 activiti 5.22.0 JDK 1.8 1. 介绍 这个快速 ...

  8. Python--day27--内置函数isinstance和issubclass方法

  9. tensorflow -gpu安装,史上最新最简单的途径(不用自己装cuda,cdnn)

    tensorflow -gpu安装首先,安装Anoconda1. 官网下载点我: 2.安装 点击 python 3.6 version自动下载x64版,下载好之后,然后安装. 如图,打上勾之后,一路n ...

  10. [转]ECMAScript 2016,2017 和 2018 中所有新功能的示例

    很难追踪 JavaScript(ECMAScript)中的新功能. 想找到有用的代码示例更加困难. 因此,在本文中,我将介绍 TC39 已完成 ES2016,ES2017 和 ES2018(最终草案) ...