POJ 3045 Cow Acrobats
2014-09-18 22:24
274 查看
http://poj.org/problem?id=3045
题意:
N头牛叠罗汉,每头牛有个体重Wi,力气Si.一头牛要承担的风险为所有在它上面的牛的体重之和-它的力气。求一个方案使得风险最大的牛的风险值最小。
分析:
对于相邻的两头牛,它们交换位置不影响其他的任何牛,只改变这两头牛的风险值。记sum为这两头牛上面的牛的体重总和.i在j上面
Risk i=sum-si
Risk j=sum+wi-sj
交换位置之后
Risk i'=sum+wj-si
Risk j'=sum-sj
而方案1优于方案2,则max{Riski,Riskj} < max{Riski',Riskj'}
而Risk j >Risk j'
所以 Risk i' > max{Riski,Riskj}, 且Risk i' >Risk j'。
解之会得到:
wj + sj > wi + si 即w + s大的放在下面的方案是最优的。
AC_CODE:
http://poj.org/problem?id=3045
题意:
N头牛叠罗汉,每头牛有个体重Wi,力气Si.一头牛要承担的风险为所有在它上面的牛的体重之和-它的力气。求一个方案使得风险最大的牛的风险值最小。
分析:
对于相邻的两头牛,它们交换位置不影响其他的任何牛,只改变这两头牛的风险值。记sum为这两头牛上面的牛的体重总和.i在j上面
Risk i=sum-si
Risk j=sum+wi-sj
交换位置之后
Risk i'=sum+wj-si
Risk j'=sum-sj
而方案1优于方案2,则max{Riski,Riskj} < max{Riski',Riskj'}
而Risk j >Risk j'
所以 Risk i' > max{Riski,Riskj}, 且Risk i' >Risk j'。
解之会得到:
wj + sj > wi + si 即w + s大的放在下面的方案是最优的。
AC_CODE:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int N,ans,sum[50010]; struct cow{ int u,v; bool operator < (const cow &x) const{ return u+v < x.u + x.v; } }node[50010]; int main(){ // freopen("in.txt", "r", stdin); while(scanf("%d",&N) != EOF){ memset(sum, 0, sizeof(sum)); for(int i=1; i<=N; i++) scanf("%d%d",&node[i].u,&node[i].v); sort(node + 1, node + 1 + N); int ans = -0x3f3f3f3f; for(int i=1; i<=N; i++){ sum[i] = sum[i - 1] + node[i].u; ans = max(ans, sum[i - 1] - node[i].v); } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 3045 Cow Acrobats (最大化最小值)
- POJ --3045--Cow Acrobats(贪心模拟)
- poj 3045 Cow Acrobats
- POJ 3045 Cow Acrobats 贪心
- poj-3045 Cow Acrobats
- POJ-3045: Cow Acrobats
- POJ 3045 Cow Acrobats
- POJ --3045--Cow Acrobats(贪心模拟)
- POJ 3045 Cow Acrobats(贪心 or 二分)
- poj 3045 Cow Acrobats(数学题)
- poj 3045 Cow Acrobats 贪心
- POJ3045 Cow Acrobats 贪心
- POJ-3045-Cow Acrobats
- POJ 3045 Cow Acrobats
- POJ 3045 Cow Acrobats
- poj 3045 Cow Acrobats
- POJ - 3045 Cow Acrobats (贪心)
- POJ 3045 Cow Acrobats(排序题)
- POJ 3045 Cow Acrobats (贪心)
- Greedy:Cow Acrobats(POJ 3045)