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= ...
随机推荐
- (原创)speex与wav格式音频文件的互相转换(二)
之前写过了如何将speex与wav格式的音频互相转换,如果没有看过的请看一下连接 http://www.cnblogs.com/dongweiq/p/4515186.html 虽然自己实现了相关的压缩 ...
- 8.LNMP环境的配置
LNMP环境的配置 参照文档:https://oneinstack.com/install/ 安装文件位置:/data/soft: ```yum -y install wget screen pyth ...
- 发布GeoServer后预览提示下载wms文件
这是因为发布的图层有中文所导致的,只需修改tomcat的server.xml文件 <Connector port="8080" protocol="HTTP/1.1 ...
- YII中面包屑制作(当前位置:网站首页 >> 会员登陆)
面包屑制作(当前位置:网站首页 >> 会员登陆) 作用:就是在布局里要显示的信息,但这个信息在不同的页面里显示的内容不一样,例如:网页的title.网页的当前位置等等 1.布局中每个页面t ...
- C#读取Excel文档
上面分别是Excel文档的内容和读取结果: 奉上C#源代码: using System; using System.Data; using System.Data.OleDb; namespace R ...
- Tomcat中JSP引擎工作原理
http://blog.csdn.net/linjiaxingqqqq/article/details/7164449 JSP运行环境: 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有W ...
- ios 可变参数(va_list,va_start,va_end)
例如:UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, ...等多个可变参数. ios实现传递不定长的多个参数的 ...
- C#基础总复习03
继续更新...接下来就是面向对象的知识了 1.面向对象:概念:使用面向对象的思想进行编程可以让的程序变得扩展性更高,便于维护: 我们在现实生活中去描述一个人的时候,通过描述这个人的特征和行为. 我们在 ...
- java之泛型潜在错误
如果使用带泛型声明的类时,没有传入类型参数,那么这个类型参数默认是声明该参数时指定的第一个上限类型,这个类型参数被称为raw type(原始类型 ). eg: public class Lis ...
- mysql学习笔记(1)
参考教材<MySQL入门经典> 王雨竹 高飞 机械工业出版社 软件下载:http://www.mysql.com 安装好后打开命令提示符 (黑窗口) net start mys ...