Hdu 2979 Expensive Drink
Description
There are some water, milk and wine in your kitchen. Your naughty little sister made some strange drinks by mixing them together, and then adds some sugar! She wants to know whether they taste good, but she doesn't want to try them herself. She needs your help.
Your sister knows that you don't want to drink them either (anyone wants to?), so she gives you a chance to escape: if you can guess the price of a special drink, she gives you freedom. Warning: she loves her special drink so much that you should never under-estimate its cost! That is, you're to find the most expensive possible price of it.
The price of each drink equals to its cost. If the amounts of water, milk, wine and sugar used in the drink are a1, a2, a3 and a4 respectively, and the unit costs of water, milk, wine and sugar are \(c_1, c_2, c_3\) and \(c_4\) respectively, then the drink costs \(a_1c_1 + a_2c_2 + a_3c_3 + a_4c_4\) . To give you some hope to win, she told you the costs of exactly \(n\) ordinary drinks. Furthermore, she promised that the total cost of sugar a4c4 is always a real number in the interval \([L, R]\) , in any drink.
Sadly, you don't know the exact price of anything (you're a programmer, not a housewife!), but you know that water is the cheapest; wine is the most expensive, i.e., \(0 \le c_1 \le c_2 \le c_3\) . Then the best thing you can do is to assume units costs can be any real numbers satisfying this inequality.
Write a program to find the highest possible price of the special drink.
Input
The input contains several test cases. The first line of each test case contains three positive integers \(n, L, R\) \((1 \le n \le 100, 0 \le L \le R \le 100)\) . The next \(n\) lines each contain four non-negative integer \(a_1, a_2, a_3 , p\) \((0 \le a_1,a_2,a_3 \le 100, 0 \le p \le 10000)\) , the amount of water, milk and wine, and the price. The last line of the case contains three integers \(a1, a2, a3 (0 \le a1,a2,a3 \le 100)\) , the drink to be estimated. The last test case is followed by a single zero, which should not be processed.
Output
For each test case, print the case number and the highest possible price to four decimal places. If the input is selfcontradictory, output ``Inconsistent data". If the price can be arbitrarily large, output "Too expensive!".
Sample Input
1 3 5
1 2 3 10
2 4 6
1 2 4
1 1 1 1
1 1 1
1 3 8
0 1 0 17
0 0 1
3 1 2
2 1 3 14
1 5 1 15
7 3 2 21
4 1 6
2 0 2
45 31 53 4087
30 16 1 1251
11 51 34
0
Sample Output
Case 1: 19.0000
Case 2: Inconsistent data
Case 3: Too expensive!
Case 4: 26.2338
Case 5: 3440.3088
其实就是一个线性规划裸题。
首先有\(c_1-c_2\le0,c_2-c_3\le0\)
之后对于第\(i\)条限制,我们可得\(P-R \le a_{i1}c_1+a_{i2}c_2+a_{i3}c3 \le P-L\)。我们可以把他化成两个限制\(a_{i1}c_1+a_{i2}c_2+a_{i3}c3 \le P-L,-a_{i1}c_1-a_{i2}c_2-a_{i3}c3 \le R-P\)。最大化\(a_1c_1+a_2c_2+a_3c_3+R\)。直接上单纯形就行了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define maxn (210)
#define eps (1e-8)
int cnt,tot,T,N,L,R,idx[maxn],idy[maxn],q[maxn]; double lim[maxn][5];
inline void pivot(int x,int y)
{
swap(idy[x],idx[y]);
double tmp = lim[x][y]; lim[x][y] = 1/lim[x][y];
for (int i = 0;i <= 3;++i) if (y != i) lim[x][i] /= tmp;
cnt = 0; for (int i = 0;i <= 3;++i) if (i != y&&(lim[x][i] > eps||lim[x][i] < -eps)) q[++cnt] = i;
for (int i = 0;i <= tot;++i)
{
if ((x == i)||(lim[i][y] < eps&&lim[i][y] > -eps)) continue;
for (int j = 1;j <= cnt;++j) lim[i][q[j]] -= lim[x][q[j]]*lim[i][y];
lim[i][y] = -lim[i][y] / tmp;
}
}
inline bool work()
{
while (true)
{
int x = 0,y = 0;
for (int i = 1;i <= tot;++i) if (lim[i][0] < -eps&&((!x)||(rand()&1))) x = i; if (!x) break;
for (int i = 1;i <= 3;++i) if (lim[x][i] < -eps&&((!y)||(rand()&1))) y = i; if (!y) return puts("Inconsistent data"),false;
pivot(x,y);
}
while (true)
{
int x = 0,y = 0; double mn = 1e60;
for (int i = 1;i <= 3;++i) if (lim[0][i] > eps) { y = i; break; } if (!y) break;
for (int i = 1;i <= tot;++i) if (lim[i][y] > eps&&lim[i][0]/lim[i][y] < mn) mn = lim[i][0]/lim[i][y],x = i; if (!x) return puts("Too expensive!"),false;
pivot(x,y);
}
return true;
}
int main()
{
//freopen("1903.in","r",stdin);
//freopen("1903.out","w",stdout);
srand(233);
while (++T)
{
scanf("%d %d %d",&N,&L,&R); if (!N) break;
printf("Case %d: ",T); tot = 0; memset(lim,0,sizeof(lim));
for (int i = 1;i <= N;++i)
{
for (int j = 1;j <= 3;++j) scanf("%lf",lim[tot+1]+j);
scanf("%lf",lim[++tot]+0); lim[tot+1][0] = -lim[tot][0]+R; ++tot; lim[tot-1][0] -= L;
for (int j = 1;j <= 3;++j) lim[tot][j] = -lim[tot-1][j];
}
lim[++tot][1] = 1; lim[tot][2] = -1;
lim[++tot][2] = 1; lim[tot][3] = -1;
for (int i = 1;i <= 3;++i) scanf("%lf",lim[0]+i);
for (int i = 1;i <= 3;++i) idx[i] = i;
for (int i = 1;i <= tot;++i) idy[i] = i+3;
if (work()) printf("%.4lf\n",-lim[0][0]+R);
}
//fclose(stdin); fclose(stdout);
return 0;
}
Hdu 2979 Expensive Drink的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- HDU 5734 Acperience(返虚入浑)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- HDU 1044 Collect More Jewels(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 1800 (map)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1800 Flying to the Mars Time Limit: 5000/1000 MS (Java/ ...
- hdu 5444 Elven Postman
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Description Elves are very peculia ...
- hdu 1301 Jungle Roads 最小生成树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrish ...
- HDU 5734 Acperience
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5734 Acperience (推导)
Acperience 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5734 Description Deep neural networks (DN ...
- Hdu 5444 Elven Postman dfs
Elven Postman Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
随机推荐
- 神奇的 BlocksKit(1):源码分析(上)
高能预警:本篇文章非常长,因为 BlocksKit 的实现还是比较复杂和有意的.这篇文章不是为了剖析 iOS 开发中的 block 的实现以及它是如何组成甚至使用的,如果你想通过这篇文章来了解 blo ...
- java pdu短信解码
java pdu短信解码 长短信未验证 有兴趣的可以试试 根据python的方法改写的 /** * PDU短信解析 * * * @param pduPayload * @return */ publi ...
- cglib源码分析(二):Class name 生成策略
一.如何获取动态生成的class 字节码 结合生成的class文件是一个学习cglib的比较好的方法.在cglib中,生成的class文件默认只存储在内存中,我们可以在代码中加入下面语句来获取clas ...
- shell记录
查看linux服务器有哪些人曾经ssh登陆过,以及他们的登录信息 who查看当前正在ssh链接中的 last查看最近被链接过的 who last netstat -nltp -an ...
- Web内容禁止选中的两种方式
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5761818. ...
- sql2012 新增 OFFSET/FETCH
SQL Server 对行数的排序提供了 TOP 筛选.SQL Server 2012 新增了 OFFSET 筛选. 一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回 ...
- C#微信公众号开发 -- (二)验证成为开发者
接下来就是验证成为开发者了.先来看一下验证的界面及需要填写的信息 在接口配置信息中填写需要处理验证信息的页面或者一般性处理文件,这里以aspx页面为例 URl中的格式为:http://XXX.com/ ...
- web相关
1. html 和 htm 的区别 如果一个网站有index.html和index.htm 默认情况下优先访问.html htm是为了兼容之前dos系统的命名规范. 2. http1.0短连接 htt ...
- input设置disabled,经过strus2提交到后台,后台取不到值
页面中有多个name相同的input与后台action中一个属性对应,一直在好奇为什么会可以提交到后台呐,但是有时还报这个属性找不到对应的方法(多个name相同好像匹配的是数组,所以找不到), 但是我 ...
- can't find -lsocket的解决办法
在UNIX/LINUX当中是不存在libsocket的.传说中,socket的功能库是放在libc当中的,所以如果需要连接的话修改成-lc就可以了.