poj3045Cow Acrobats(贪心)
2015-08-20 19:19
183 查看
一看到最大值最小就想到了二分答案,但是呢?然后呢?(如果有人想明白为什么这个不能用二分答案能不能指点一下呢^-^)
好吧,最后看了题解是贪心。
假设现在的队列是已经排好的,那么取其中任意两个位置i ,j (i<j),i处的压力等于前面重量之和Wq-s[i],j处等于Wq+w[i]+中间重量之和Wm-s[j]。
再调换一下i,j,j处为Wq-s[j],i处为Wq+w[j]+Wm-s[i]。
那么这个队列没有原来那个好,Wq+w[j]+Wm-s[i] > Wq+w[i]+Wm-s[j],即w[j]+s[j] > w[i]+s[i]。
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int w,s;
}edge[50050];
int cmp(node a,node b)
{
return a.w+a.s>b.w+b.s;
}
int n;
int sum;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&edge[i].w,&edge[i].s);
sum+=edge[i].w;
}
sort(edge+1,edge+1+n,cmp);
int ans=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
sum-=edge[i].w;
ans=max(ans,sum-edge[i].s);
}
printf("%d",ans);
}
好吧,最后看了题解是贪心。
假设现在的队列是已经排好的,那么取其中任意两个位置i ,j (i<j),i处的压力等于前面重量之和Wq-s[i],j处等于Wq+w[i]+中间重量之和Wm-s[j]。
再调换一下i,j,j处为Wq-s[j],i处为Wq+w[j]+Wm-s[i]。
那么这个队列没有原来那个好,Wq+w[j]+Wm-s[i] > Wq+w[i]+Wm-s[j],即w[j]+s[j] > w[i]+s[i]。
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int w,s;
}edge[50050];
int cmp(node a,node b)
{
return a.w+a.s>b.w+b.s;
}
int n;
int sum;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&edge[i].w,&edge[i].s);
sum+=edge[i].w;
}
sort(edge+1,edge+1+n,cmp);
int ans=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
sum-=edge[i].w;
ans=max(ans,sum-edge[i].s);
}
printf("%d",ans);
}
相关文章推荐
- 1.一些 贪心算法 的简单思维题:
- 贪心算法——字典序最小问题
- 贪心算法——区间调度问题
- Jump Game I,II 贪心
- Wildcard Matching
- 贪心题目循环和控制台折行
- HDOJ 1009
- 【解题报告】【USACO】酸奶工厂
- 【解题报告】【】交谊舞
- POJ 1328
- 贪心 hdu 1003
- 最大容器
- 满足和为定值的两个数或多个数
- HUD1052 __ P2 1002 __ Tian Ji -- The Horse Racing
- 2015年国家集训队测试 BZOJ3816矩阵变幻
- HDU--1052
- POJ 2709 混合颜料 acm 贪心
- 田忌赛马Tian Ji -- The Horse Racing(hdu 1052)
- 贪心(HDU 1055)
- zoj 2710 Two Pipelines