[Uva10641]Barisal Stadium(区间dp)

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

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

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

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

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const double eps=1e-8;
const int N=105;  
const int M=1005;  
int n,m,dp[N];  
bool flag[N];
struct Point{  double x,y;  Point(double x=0,double y=0) {  this->x=x;  this->y=y;  }void read(){  scanf("%lf%lf",&x,&y);  }
}p[N],o;struct node{  int l,r,c;
}q[M];bool judge(Point p0, Point p1, Point p2) {  return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y)<-eps;//叉积判断是否能被照到 
}node tra(Point t, int c){  node ans;  ans.c=c;memset(flag,0,sizeof flag);  for(int i=0;i<n;i++) if(judge(t,p[i],p[i+1]))  flag[i]=true;if (flag[0]&&flag[n-1]){  int l=n-1,r=0;while(flag[l-1]) l--;  while(flag[r+1]) r++;  ans.l=l,ans.r=r+n;}else{  int l=0,r=n-1;  while(!flag[l]) l++;while(!flag[r]) r--;ans.l=l,ans.r=r;  }return ans;  
}  bool solve(){  int ans=inf; for(int i=0;i<n;i++){  fill(dp,dp+2*n+1,inf);dp[i]=0;for(int j=0;j<n;j++){int r=i+j;  for(int k=0;k<m;k++){if(q[k].l>r) continue;int now=min(i+n,q[k].r+1);  dp[now]=min(dp[now],dp[r]+q[k].c);  }  }  ans=min(ans,dp[i+n]);}if(ans==inf) return false;printf("%d\n",ans);return true;
}  int main(){  while(~scanf("%d",&n)&&n){for(int i=0;i<n;i++) p[i].read();  p[n]=p[0];scanf("%d",&m);  Point tmp;  int c;  for(int i=0;i<m;i++){  tmp.read();scanf("%d",&c);  q[i]=tra(tmp,c);  }if (!solve()) printf("Impossible.\n");  }  return 0;  
}  

 

转载于:https://www.cnblogs.com/elpsycongroo/p/7808858.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用c语言代码大全,C语言的一些常用代码

C语言经常需要发明各种轮子&#xff0c;为方便以后能够把精力放在应用逻辑上而不在发明轮子上&#xff0c;把一些常用的代码片段列于此。首先是字符串处理方面的&#xff0c;strcpy 函数容易越界&#xff0c;习惯使用 strncpy 函数&#xff0c;但此函数只管复制最多 n 个字符&a…

Linux kernel 同步机制(下篇)

之前的文章Linux kernel同步机制在上一部分&#xff0c;我们讨论了最基本常见的几类同步机制&#xff0c;这一部分我们将讨论相对复杂的几种同步机制&#xff0c;尤其是读写信号量和RCU&#xff0c;在操作系统内核中有相当广泛的应用。读写信号量&#xff08;rw_semaphore&…

白话设计模式——Abstract Factory

Abstract Factory&#xff0c;把英文直接翻译过来的话就是“抽象工厂”&#xff0c;既然是工厂&#xff0c;那就肯定是生产产品的地方。不过&#xff0c;它不是生产同一类的产品&#xff0c;而是生产同一系列的产品。举个例子&#xff0c;广州本田现在生产3种汽车&#xff0c;O…

c语言程序设计工资纳税系统流程图,c语言程序设计,纳税工资系统.doc

c语言程序设计,纳税工资系统c语言程序设计,纳税工资系统第一章 课程设计目的和要求1.1 课程设计的目的C语言一直是程序设计语言的主流之一数据类型丰富、齐全。C供了整数、实数、字符、字符串等基本数据类型&#xff0c;还提供数组、指针、结构体等构造数据类型运算符丰富、齐全…

工程师实战:单片机裸机程序框架是怎样炼成的?

前言 前不久&#xff0c;我有位做测试的朋友转去做开发的工作&#xff0c;面试遇到了一个问题&#xff0c;他没明白&#xff0c;打电话问了我。题目大概就是&#xff1a;在单片机裸机开发时&#xff0c;单片机要处理多个任务&#xff0c;此时你的程序框架是怎样的呢&#xff1f…

c 语言指针教学视频,[C语言] 猎豹网校 C和指针视频教程

资源介绍21days_Cpp_二进制和十六进制.mp4xa0xa080x86_内联汇编.mp4xa0xa0ABG2C_for_循环.mp4xa0xa0ABG2C_关系运算符.mp4xa0xa0ABG2C_字符串.mp4xa0xa0ABG2C_循环.mp4xa0xa0ABG2C_数学运算.mp4xa0xa0ABG2C_更高级的运算符.mp4xa0xa0ABG2C_测试多个值.mp4xa0xa0ABG2C_终止循环.…

此处为本人自勉自留地!

本人自97年从师范学院毕业&#xff0c;整整8年的青春献给了自己所事业!前一段&#xff0c;遇到一些人和事&#xff0c;对我有些触动!找了一块自留地&#xff0c;写些东西进行自勉!也许我将有一个全新的开始&#xff0c;也许还是走以前的老路!希望是自己的&#xff0c;结果也是自…

Oracle shared server模式连接ORA-12519

设置了shared server连接&#xff0c;dispatcher进程和shared server进程都没有问题listener.ora文件配置如下&#xff1a;LSNR2 (DESCRIPTION (ADDRESS_LIST (ADDRESS(PROTOCOLtcp)(HOSTedbjr2p1.example.com)(PORT1526)) ))SID_LIST_LSNR2 (SID_LIST (SID_…

图解http

今天是周五&#xff0c;按照正常的情况&#xff0c;今天下班后将会经历一周中最愉快的时光&#xff0c;愉快的时间总是会有那么一些短暂&#xff0c;所以我就送给大家一个资料 「图解http」这是一个微信好友发给我的&#xff0c;他一直给我发送了很多很多消息&#xff0c;比如什…

17种正则表达式

"^\d$"  //非负整数&#xff08;正整数 0&#xff09;"^[0-9]*[1-9][0-9]*$"  //正整数"^((-\d)|(0))$"  //非正整数&#xff08;负整数 0&#xff09;"^-[0-9]*[1-9][0-9]*$"  //负整数"^-?\d$"    //整数&…

为什么执行自己的程序要在前面加./

前言在Linux中&#xff0c;我们执行内置命令时&#xff0c;直接输入命令名称即可&#xff0c;如&#xff1a;$ mv a b #将a重命名为b而在执行自己写好的程序时&#xff0c;却要带上./&#xff0c;例如&#xff1a;$ hello hello: command not found $ ./hello hello world这是为…

break lab c语言,C语言实验lab10.doc

C语言实验lab10C程序设计实验报告学院&#xff1a;国际商学院班级&#xff1a;14电商专业&#xff1a;电子商务姓名&#xff1a;熊靓男日期&#xff1a;15.5.25学号&#xff1a;1420070049实验目的复习一维数组掌握二维数组参数的传递掌握排序算法实验内容消灭怪物在阳光明媚月…

C语言怎么计算数据类型范围?

之前在网上看到的一个讨论&#xff0c;是谁决定了数据类型的范围&#xff1f;比如说&#xff0c;怎么确定 char 就是 -128~127 &#xff0c;而不是 -127~128 呢&#xff1f;说下规定signed 的取值范围是 -(2N-1) to 2N-1 - 1unsigned 的取值范围是 0 to (2N-1) (2N-1 - 1)只要…

双十一为何规则复杂,套路多多

为啥不直接打5折?为了让你把“穷人”俩字写到自己脸上啊。 双十一快到了&#xff0c;今年我又一次有了不太想参加的感觉。作为一个阅读理解不太灵光的人&#xff0c;去年的活动我就整得不太明白——优惠券都是十块十块的&#xff0c;也不知道该咋用;还有预付款、整点秒杀之类的…

出去转了一圈

以前一直不知道市场啊&#xff0c;销售啊什么的到底是怎么回事&#xff0c;今天下午跟着公司的市场总监出去转了一圈&#xff0c;算是有了点感谢认识。现在&#xff0c;伴着柔柔的jazz&#xff0c;写点东西。今下午的风很大&#xff0c;温度也很底&#xff0c;应该说是我来北京…

c语言程序设计顺序结构题目,C语言编程 顺序结构编程练习题目

C语言顺序结构编程练习题目C语言编程 顺序结构题目题目1计算摄氏温度 输入一个华氏温度&#xff0c;要求输出摄氏温度。公式为&#xff1a;C5/9(F-32)&#xff0c;输出要有文字说明&#xff0c;取2位小数。式中&#xff1a;C表示摄氏温度&#xff0c;F表示华氏温度题目2 一辆汽…

团建是什么鬼?

2012年我入职TCL&#xff0c;在TCL我体会到了团队建设的文化&#xff0c;也正是经历了那段职场&#xff0c;我明白了很多「可意味不可言传」。那时候我们经常五十成群出去吃饭、喝酒、唱歌&#xff1b;上学那会我很不喜欢团队活动&#xff0c;特别是室内的活动&#xff0c;总感…

Alpha 答辩总结

【Alpha展示评审表格】 小组序号小组名称格式&#xff08;20%&#xff09;内容&#xff08;20%&#xff09;PPT&#xff08;20%&#xff09;演讲&#xff08;20%&#xff09;答辩&#xff08;20%&#xff09;总分1天机组1515151516762PMS1617171616824“像我这么能打的还有五个…

一粒沙子变成芯片的全过程

推荐阅读&#xff1a;专辑|Linux文章汇总专辑|程序人生专辑|C语言嵌入式Linux微信扫描二维码&#xff0c;关注我的公众号

使用指针星号转移c语言,C中的指针:何时使用号和星号?

你有指针和值&#xff1a;int* p; // variable p is pointer to integer typeint i; // integer value将指针转换为带*的值&#xff1a;int i2 *p; // integer i2 is assigned with integer value that pointer p is pointing to您可以将值转换为带&amp ;:的指针int* p2 …