题意:按照顺时针给出操场的周边点,然后给出周围可以建设照明灯的位置,以及在该位置建设照明灯的代价,照明灯照射的范围与操场的边界相切,现在要求一个最小的花费,要求操场的所有边都被照射到。

解题关键:预处理每台灯能够覆盖到的范围,然后对环进行dp即可。对环进行dp的方法是枚举起点,覆盖所有点即可。

注意用叉积的方法处理灯能否照到某条边->某个点。

$dp[i][j]$表示从第$i$个点到第$j$个点之间的边都被照射到的最小代价,只要有某个等得照射范围有覆盖到$i$,$j$,就可以向外扩展。

  1. #include<bits/stdc++.h>
  2. #define inf 0x3f3f3f3f
  3. using namespace std;
  4. typedef long long ll;
  5. const double eps=1e-;
  6. const int N=;
  7. const int M=;
  8. int n,m,dp[N];
  9. bool flag[N];
  10. struct Point{
  11. double x,y;
  12. Point(double x=,double y=) {
  13. this->x=x;
  14. this->y=y;
  15. }
  16. void read(){
  17. scanf("%lf%lf",&x,&y);
  18. }
  19. }p[N],o;
  20.  
  21. struct node{
  22. int l,r,c;
  23. }q[M];
  24.  
  25. bool judge(Point p0, Point p1, Point p2) {
  26. return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y)<-eps;//叉积判断是否能被照到
  27. }
  28.  
  29. node tra(Point t, int c){
  30. node ans;
  31. ans.c=c;
  32. memset(flag,,sizeof flag);
  33. for(int i=;i<n;i++) if(judge(t,p[i],p[i+])) flag[i]=true;
  34. if (flag[]&&flag[n-]){
  35. int l=n-,r=;
  36. while(flag[l-]) l--;
  37. while(flag[r+]) r++;
  38. ans.l=l,ans.r=r+n;
  39. }
  40. else{
  41. int l=,r=n-;
  42. while(!flag[l]) l++;
  43. while(!flag[r]) r--;
  44. ans.l=l,ans.r=r;
  45. }
  46. return ans;
  47. }
  48.  
  49. bool solve(){
  50. int ans=inf;
  51. for(int i=;i<n;i++){
  52. fill(dp,dp+*n+,inf);
  53. dp[i]=;
  54. for(int j=;j<n;j++){
  55. int r=i+j;
  56. for(int k=;k<m;k++){
  57. if(q[k].l>r) continue;
  58. int now=min(i+n,q[k].r+);
  59. dp[now]=min(dp[now],dp[r]+q[k].c);
  60. }
  61. }
  62. ans=min(ans,dp[i+n]);
  63. }
  64. if(ans==inf) return false;
  65. printf("%d\n",ans);
  66. return true;
  67. }
  68.  
  69. int main(){
  70. while(~scanf("%d",&n)&&n){
  71. for(int i=;i<n;i++) p[i].read();
  72. p[n]=p[];
  73. scanf("%d",&m);
  74. Point tmp;
  75. int c;
  76. for(int i=;i<m;i++){
  77. tmp.read();
  78. scanf("%d",&c);
  79. q[i]=tra(tmp,c);
  80. }
  81. if (!solve()) printf("Impossible.\n");
  82. }
  83. return ;
  84. }

[Uva10641]Barisal Stadium(区间dp)的更多相关文章

  1. UVA 10641 - Barisal Stadium(DP + 几何)

    题目链接:10641 - Barisal Stadium 题意:逆时针给定n个点,在给m个灯,每一个灯有一个花费,要求最小花费使得全部边能被灯照到 思路:用向量叉积推断向量的顺逆时针关系,从而预处理出 ...

  2. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  3. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  4. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  5. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  6. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  7. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  8. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  9. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

随机推荐

  1. [原创]java WEB学习笔记02:javaWeb开发的目录结构

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. [原创]java WEB学习笔记08:HttpServletRequest & ServletRequest

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. systemverilog FAQ(zz)

    1. What is clocking block? Ans: Clocking block can be declared using the keywords clocking and endcl ...

  4. 第一篇 css导入方式 及选择器

    一 推荐资料 推荐书籍 css Zen Garden 中文(css禅意花园) 二.css样式 1.css样式表特征 继承性  大多数css的样式规则可以被继承 层叠性 1)可以定义 多个样式 2)不冲 ...

  5. hd acm1017

    Problem Description Given two integers n and m, count the number of pairs of integers (a,b) such tha ...

  6. C# 多服务器上传 示例

    图片服务器  带宽越来越不够用,还有当一台服务器的机房出问题的时候,不影响 整个web,以及 考虑网通电信访问服务器的 速度,所以考虑使用多台 图片 服务器 这个时候要求 图片服务器 内容是同步 的  ...

  7. js 处理移动端触摸事件

    在处理移动端的touch事件时,我们可以选择一些插件来处理,比如jquery ui touch punch.js 提供丰富的触摸效果,可以满足移动端的开发, 但是,有些移动端开发中,并不需要如此复杂的 ...

  8. 英语发音规则---发/i:/的字母及字母组合

    英语发音规则---发/i:/的字母及字母组合 一.总结 一句话总结: 1.字母组合ee发/iː/? bee beef see agree week meeting feel sweet free be ...

  9. beans.factory.BeanCreationException beans.factory.annotation.Autowired(required=true)

    主要是这三个方面排查: 1,注入写成这样 @Autowired   private BrandServiceImpl      brandServiceImpl; 2,jar冲突,在pom.xml中 ...

  10. SWFObject是什么

    一:简介: SWFObject是一个用于在HTML中方便插入Adobe Flash媒体资源(*.swf文件)的独立.敏捷的JavaScript模块.该模块中的JavaScript脚本能够自动检测PC. ...