题目链接:10641 - Barisal Stadium

题意:逆时针给定n个点,在给m个灯,每一个灯有一个花费,要求最小花费使得全部边能被灯照到
思路:用向量叉积推断向量的顺逆时针关系,从而预处理出每一个灯能照到的边,然后因为n个点是环的,所以能够直接扩大两倍,dp时候去枚举起点就可以
状态为dp[i]表示如今照到i条边之前的边所有照亮须要的最小花费
代码:
#include <stdio.h>
#include <string.h> const double eps = 1e-6;
const int N = 105;
const int M = 1005;
int n, m, i, j, dp[N];
bool flag[N];
#define INF 0x3f3f3f3f
#define min(a,b) ((a)<(b)?(a):(b)) 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 Q {
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;
} Q tra(Point t, int c) {
Q ans;
ans.c = c;
memset(flag, false, 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 = n;
while (flag[l - 1]) l--;
while (flag[r - n + 1]) r++;
ans.l = l; ans.r = r; } else {
int l = 0, r = n - 1;
while (!flag[l]) l++;
while (!flag[r]) r--;
ans.l = l; ans.r = r;
}
if (ans.r < ans.l) ans.r += n;
return ans;
} bool solve() {
int ans = INF;
for (int i = 0; i < n; i++) {
memset(dp, INF, sizeof(dp));
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 (i = 0; i < n; i++) p[i].read();
p[n] = p[0];
scanf("%d", &m);
Point tmp;
int c;
for (i = 0; i < m; i++) {
tmp.read();
scanf("%d", &c);
q[i] = tra(tmp, c);
}
if (!solve()) printf("Impossible.\n");
}
return 0;
}

UVA 10641 - Barisal Stadium(DP + 几何)的更多相关文章

  1. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  2. uva 10817(数位dp)

    uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...

  3. 【Uva 10641】 Barisal Stadium

    [Link]: [Description] 输入一个凸n(3≤n≤30)边形体育馆和多边形外的m(1≤m≤1000)个点光源,每个点光 源都有一个费用值.选择一组点光源,照亮整个多边形,使得费用值总和 ...

  4. [Uva10641]Barisal Stadium(区间dp)

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

  5. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  6. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  7. uva 10671 - Grid Speed(dp)

    题目链接:uva 10671 - Grid Speed 题目大意:给出N,表示在一个N*N的网格中,每段路长L,如今给出h,v的限制速度,以及起始位置sx,sy,终止位置ex,ey,时间范围st,et ...

  8. uva 1331 - Minimax Triangulation(dp)

    option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4077&mosm ...

  9. UVa 11825 - Hackers' Crackdown DP, 枚举子集substa = (substa - 1)&sta 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

随机推荐

  1. PJSIP开源库详解

    PJSIP是一个包含了SIP.SDP.RTP.RTCP.STUN.ICE等协议实现的开源库.它把基于信令协议SIP的多媒体框架和NAT穿透功能整合成高层次.抽象的多媒体通信API,这套API能够很容易 ...

  2. Android 最火高速开发框架AndroidAnnotations简单介绍

    在上一篇Android 最火的高速开发框架androidannotations配置具体解释中介绍了在eclipse中配置androidannotation的步骤,如需配置请參考. 1.目标 andro ...

  3. 最小生成树(MST)求解旅行商问题

    从当前位置开始(也可以不指定起始位置),访问完所有未访问的端点后返回起始点的最短路径就是连接所有端点的生成树.最小生成树需保证: 每条边最多只能被选 1 次: 抹掉所有未被选择的边时,图形不能分为上下 ...

  4. ZOJ 3168 Sort ZOJ7 水

    再水一发,舍友肿么还在睡T T. ---------------------------------舍友还在睡觉的分割线--------------------------------- http:/ ...

  5. 【48.51%】【poj 1611】The Suspects

    Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 34447 Accepted: 16711 Description Severe ...

  6. 1.2.4 Java Annotation 提要

    (本文是介绍依赖注入容器Spring和分析JUnit源码的准备知识) Java Annotation(标注) java.lang.annotation.Annotation是全部Java标注的父接口. ...

  7. jquery ajax实现省市二级联动

    今天给大家带来使用jQuery ajax实现的省市联动效果.我们直奔主题,先说下实现思路: 准备数据 这里数据库我使用的是mysql,先看下表格: provience表 city表 这里使用provi ...

  8. 解决IE6下PNG透明的JS插件:DD_belatedPNG.js

    DD_belatedPNG是一款解决IE6下PNG透明的JS插件,支持background-position和background-repeat属性,支持伪类.使用方法: <!--[if lte ...

  9. Linux开发环境搭建与使用系列教程

    00.Linux开发环境搭建与使用1——Linux简史 01.Linux开发环境搭建与使用2——Linux系统(ubuntu)安装方案 02.Linux开发环境搭建与使用3——通过虚拟机安装系统(ub ...

  10. 小强的HTML5移动开发之路(38)——jqMobi插件ActionSheet

    现在在手机客户端上Action Sheet非常常见,比如微信中的分享按钮菜单,下面我们使用jqMobi实现一个Action Sheet,如下: 首先右击上面的按钮选择审查元素(我用的是Chrome浏览 ...