标签:des style http java color os strong io
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 223 Accepted Submission(s): 123
3 10 10 20 1 2 3
150HintMemset137 takes the first 10 seconds to solve problem B, then solves problem C at the end of the 30th second. Memset137 gets AK at the end of the 40th second. L = 10 * 2 + (10+20) * 3 + (10+20+10) * 1 = 150.
题意 有n个题目 完成第i个题目需要的时间为e[i] 第i个题目的系数为k[i]
你可以按任意顺序完成题目 比赛开始到完成第i个题目消耗的总时间为t[i]
那么完成第i个题目要扣掉k[i]*t[i]分 求完成所有题目至少扣多少分;
考虑任意相邻两题i,j 改变i,j时i,j之前和之后所有的题目对结果都没有影响
只是i,j两题的扣分和由原来的(t+e[i])*k[i]+(t+e[i]+e[j])*k[j]变成了(t+e[i]+e[j])*k[i]+(t+e[j])*k[j]
比较可以发现只是e[i]*k[j]变成了e[j]*k[i] 所以 若e[i]*k[j]<e[j]*k[i] 那么i就应该在j之前完成;
以此进行排序即可;
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N = 100050; ll k[N], o[N], t[N], e[N], n; bool cmp (int i, int j) { return (e[i] * k[j] < e[j] * k[i]); } int main() { while (scanf ("%I64d", &n) != EOF) { for (int i = 1; i <= n; ++i) scanf ("%I64d", &e[i]); for (int i = 1; i <= n; ++i) { o[i] = i; scanf ("%I64d", &k[i]); } sort (o + 1, o + n + 1, cmp); ll ans=0; for (int i = 1; i <= n; ++i) { int j=o[i]; t[j]=t[o[i-1]]+e[j]; ans += k[j] * t[j]; } printf ("%I64d\n", ans); } return 0; }
HDU 4882 ZCC Loves Codefires(贪心),布布扣,bubuko.com
HDU 4882 ZCC Loves Codefires(贪心)
标签:des style http java color os strong io
原文地址:http://blog.csdn.net/iooden/article/details/38097403