UVALive 6424 —— Russian Dolls(贪心)
来源:互联网 发布:java监控系统日志抓取 编辑:程序博客网 时间:2024/06/10 18:04
题目:Russian Dolls
题意:每个玩具有占用的空间和内部可容纳的空间。规定每个玩具只能直接嵌套一个玩具,可以间接嵌套,即A套B,B再套C,但是不能A同时套B和C。A能套B的条件是A的内部空间严格大于B的占用空间。第i个玩具有一个单位花费ci,乘以该玩具内部还剩于的空间即为花费。
现在要问的是经过适当的嵌套之后,最小花费是多少。
囧。。。堂堂一个贪心即可的问题,我居然分析错复杂度跑去写费用流。。。吃了N发TLE才醒悟。。。
在什么嵌套都没有的情况下,总花费是每个玩具的单位花费*其内部空间 的总和。
显然,每次嵌套会使花费减少。
对于每个玩具,如果要将它套进别的玩具里面,在条件允许的情况下肯定是找单位花费大的套,这样花费减小才快。所以反过来每个玩具也是尽可能找体积大的来套。
所以先按找单位花费从大到小排序,然后开始用玩具来套,记录好哪些玩具已经被嵌套在别人里面就行了。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Doll{int out, in, cost;bool operator < (const Doll &A)const{return cost > A.cost;}}d[1010];int n, sum;bool used[1010];int main(){while(~scanf("%d", &n)){sum = 0;for(int i=0; i<n; i++){scanf("%d %d %d", &d[i].out, &d[i].in, &d[i].cost);sum += d[i].cost * d[i].in;used[i] = 0;}sort(d, d+n);for(int i=0; i<n; i++){int x = -1;for(int j=0; j<n; j++){if(!used[j] && d[j].out<d[i].in){if(x==-1 || d[j].out>d[x].out)x=j;}}if(~x){sum -= d[x].out * d[i].cost;used[x] = 1;}}printf("%d\n", sum);}return 0;}
0 0
- UVALive 6424 —— Russian Dolls(贪心)
- Uvalive 6424 - Russian Dolls (贪心)
- UVALive 6424 Russian Dolls(贪心)
- UVALive 6424 Russian Dolls 贪心
- UVALive 6424 Russian Dolls 贪心
- 文章标题UVALive 6424:Russian Dolls(贪心)
- UVALive 6424 Russian Dolls
- 6424 Russian Dolls--贪心
- hdu1677—Nested Dolls(贪心)
- Russian Dolls
- Russian Dolls
- hdu1677 Nested Dolls(贪心)
- uva 10549 Russian Dolls (DP)
- POJ 2303 Russian Dolls 笔记
- hdu1677--Nested Dolls(贪心+LIS)
- HDOJ 1677 Nested Dolls(贪心+LIS)
- HDU 1677 Nested Dolls (贪心)
- 【贪心】UVALive 6530——Football
- hdu 1247 Hat’s Words (字典树模版)
- CF D. Bag of mice(概率dp)
- JavaSE 反射技术
- 工作量估计的已知和未知
- C# 中对象与Json互转的方法整理笔记
- UVALive 6424 —— Russian Dolls(贪心)
- echo - TCP/UDP 7
- hdu 2412 Party at Hali-Bula(树形DP)
- raspberrypi之没有显示器玩树莓派
- 使用adb命令批处理安装&卸载apk
- CoreTelephony框架的简单使用
- 【CodeForces】383C Propagating tree 线段树
- cookies的使用
- HDU 1282 回文数猜想(简单数学题)