【C++心路历程22】贪心算法 典型模型 保护花卉 usaco contest 08.2
来源:互联网 发布:淘宝网官方网站登入 编辑:程序博客网 时间:2024/04/28 16:02
特点 数据规模大 并且每个元素有两个属性(变量) 能互相影响 对题目要求有两方面
分析方法 考虑两个元素 i j ,比较i-j顺序和j-i顺序的差距 求最优解
1)假设只有 2 头奶牛:
按照 1,2 顺序,损坏花朵的数量为: C12 = 2*cow[1].T * cow[2].D;
按照 2,1 顺序,损坏花朵的数量为: C21 = 2*cow[2].T * cow[1].D;
因此,如果 C12<=C21,则按 1,2 顺序优,否则 2,1 顺序优。
2)、假设只有 3 头牛
若 1 应最先被赶走,则需要满足:C12<=C21,C13<=C31
若 2 应最先被赶走,则需要满足:C21<=C12,C23<=C32
若 3 应最先被赶走,则需要满足:C31<=C13,C32<=C23
确定了最先被赶走的牛,则剩下的两头牛转换为 1)的分析(相同子问题)
故有比较函数(排序)
bool cmp(data x,data y)
{
int Cxy=2*x.t*y.d;
int Cyx=2*y.t*x.d;
return Cxy<Cyx;
}
再计算即可
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;struct data{ int t,d; };data a[100005];int n,sum[100005];bool cmp(data x,data y){ int Cxy=2*x.t*y.d; int Cyx=2*y.t*x.d; return Cxy<Cyx;}int main(){ //freopen("in.txt","r",stdin); scanf("%d",&n); sum[0]=0; for(int i=1;i<=n;i++) scanf("%d%d",&a[i].t,&a[i].d); sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i].d; long long ans=0; for(int i=1;i<=n;i++) { ans+=(sum[n]-sum[i])*2*a[i].t; } cout<<ans; return 0;}
0 0
- 【C++心路历程22】贪心算法 典型模型 保护花卉 usaco contest 08.2
- [USACO Open07] 保护花朵 --贪心
- 【C++心路历程33】【USACO 2016 February Contest, Bronze Problem 3.】 Load Balancing(加难)
- c典型算法 递归
- c典型算法 递归
- 【贪心】[USACO 2015 February Contest, Gold]Circular Barn
- C++典型贪心算法--找硬币问题
- 贪心算法基本思想和典型例题
- 贪心算法基本思想和典型例题
- usaco-1.3.2-Barn Repair(贪心算法)
- USACO-Section 1.2 Milking Cows【贪心算法】
- USACO section 1.3 Mixing Milk[贪心算法]
- USACO-Section1.3 Mixing Milk [贪心算法]
- USACO-Section1.3 Barn Repair [贪心算法]
- USACO-Section1.3 Mixing Milk【贪心算法】
- USACO-Section1.3 Barn Repair【贪心算法】
- C语言贪心算法
- 【C】贪心算法
- c#第一,二章总结
- 测试工程如何搭建?配置文件如何读取?
- H5利用FileReader上传图片
- 编译原理分析过程
- 关于climits
- 【C++心路历程22】贪心算法 典型模型 保护花卉 usaco contest 08.2
- python if elif 详解
- 1218: [HNOI2003]激光炸弹
- 二分查找算法(折半查找算法)
- wordpress网站的手机客户端的登陆实现
- Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)
- 【C#基础】类型转换
- 怎么设置网页内容不能被复制?怎么解决?
- Linux下vim的部分简单用法