CF 557C 暴力
2015-08-09 13:18
337 查看
题目链接:http://codeforces.com/problemset/problem/557/C
题意:给你个n个脚的桌子(1 <= n <= 10^5),每个脚的长度是li(1 <= li <= 10^5),砍掉这个叫的费用是di(1 <= di <= 200)。一个桌子能稳定仅当桌子的最大长度的脚的个数超过所有脚的个数的一半。问你砍掉一些脚,使这些费用最少,使桌子稳定。
思路:一看到看到di只有200感觉就可以暴力记录着来做。将li相同的放进同一个vector,然后记录一个sum[i],表示从长度为0的到长度为i的所有桌脚的长度和。然后枚举桌脚长度i,枚举到这个长度i,说明大于i的桌脚都要砍掉,那么当前耗费加上sum[maxn] - sum[i],然后耗费再加上在长度小于i的桌脚中需要砍掉的耗费最少的几个桌脚,最后更新答案就好了。ps:题目中说什么桌脚一个就必定稳定,桌脚两个时要两个等长才稳定,根本没考虑就A了。。。
题意:给你个n个脚的桌子(1 <= n <= 10^5),每个脚的长度是li(1 <= li <= 10^5),砍掉这个叫的费用是di(1 <= di <= 200)。一个桌子能稳定仅当桌子的最大长度的脚的个数超过所有脚的个数的一半。问你砍掉一些脚,使这些费用最少,使桌子稳定。
思路:一看到看到di只有200感觉就可以暴力记录着来做。将li相同的放进同一个vector,然后记录一个sum[i],表示从长度为0的到长度为i的所有桌脚的长度和。然后枚举桌脚长度i,枚举到这个长度i,说明大于i的桌脚都要砍掉,那么当前耗费加上sum[maxn] - sum[i],然后耗费再加上在长度小于i的桌脚中需要砍掉的耗费最少的几个桌脚,最后更新答案就好了。ps:题目中说什么桌脚一个就必定稳定,桌脚两个时要两个等长才稳定,根本没考虑就A了。。。
#include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) typedef long long ll; using namespace std; const int maxn = 100005; int n; struct ppp { int l,d; }table[maxn]; vector<int> vec[maxn]; ll sum[maxn]; int cnt[205]; ll ans; int main() { while(~scanf("%d",&n)) { mem(cnt,0); ans = 99999999999999LL; int maxx = -1; for(int i = 0;i < maxn;i++)vec[i].clear(); for(int i = 0;i < n;i++)scanf("%d",&table[i].l),maxx = max(maxx,table[i].l); for(int i = 0;i < n;i++)scanf("%d",&table[i].d),vec[table[i].l].push_back(table[i].d); ll temp; sum[0] = 0; for(int i = 1;i < maxn;i++) { temp = 0; for(int j = 0;j < vec[i].size();j++) { temp += vec[i][j]; } sum[i] = temp + sum[i - 1]; } int count = 0; for(int i = 0;i <= maxx;i++) { if(vec[i].size()) { temp = sum[maxx] - sum[i]; int remain = count - vec[i].size() + 1; if(remain > 0) { for(int j = 1;j <= 200 && remain > 0;j++) { if(remain >= cnt[j]) { temp += j * cnt[j]; remain -= cnt[j]; } else { temp += remain * j; break; } } } count += vec[i].size(); for(int j = 0;j < vec[i].size();j++) cnt[vec[i][j]]++; ans = min(ans,temp); } } printf("%I64d\n",ans); } }
相关文章推荐
- hdu5365 判断四个点是否构成正方形
- android4.02在x4412平台编译碰到的问题
- ipvsadm命令参考及其应用例子
- 系统,特别是慢查找
- hadoop详细的环境搭建
- hibernate 批量处理操作
- hdu3530Subsequence rmq
- hdu 5367 线段树动态建树
- 找出数组中前K小的值&最小堆
- 转:oracle number(p,s)数据类型
- Hello JSP!——指令元素之page篇(最后有疑问求解,感激不尽)
- C++中的友元——编程界的老王
- TWAIN Redirection Support with XenApp FAQ
- poj 2828 - Buy Tickets
- 【hdoj 4617】Weapon
- hdu5355Cake 构造+dfs
- .def文件格式
- uva11582 Colossal Fibonacci Numbers(分治法)
- Python-Selenium2做Web自动化测试(5)-对象事件的操作(鼠标操作、键盘操作)
- 数据结构-图的概述