UVa 1346 Songs (贪心好题)

原创 2013年12月06日 13:06:53

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=4092


思路:直接看这个和式,记A(i)=f(i)Σl(j) (1<=j<=i),则sum=ΣA(i)(别被下标迷惑了,s(i)完全可以用i代替)。

设sum已经达到最小,

记sum1 = A(i)+A(i+1) = (f(i)+f(i+1))*(l(1)+...+l(i-1)) + f(i)*l(i) f(i+1)*l(i) + f(i+1)*l(i+1)

交换f(i)和f(i+1),交换l(i)和l(i+1),得sum2= (f(i)+f(i+1))*(l(1)+...+l(i-1)) + f(i)*l(i) f(i)*l(i+1) + f(i+1)*l(i+1)

因为sum最小,必有sum1<=sum2,故f(i+1)*l(i)<=f(i)*l(i+1)

(也可以这么理解,频率越大的,长度越短的,即f(i)/l(i)越大的,位置越靠前)


完整代码:

/*0.032s*/

#include<bits/stdc++.h>
using namespace std;

struct node
{
	int id;
	double l, f;
	bool operator < (const node& a) const
	{
		return a.f * l < f * a.l;
	}
} a[65540];

int main()
{
	int n, i, s;
	while (~scanf("%d", &n))
	{
		for (i = 1; i <= n; ++i)
			scanf("%d%lf%lf", &a[i].id, &a[i].l, &a[i].f);
		scanf("%d", &s);
		nth_element(a + 1, a + s, a + n + 1);
		printf("%d\n", a[s].id);
	}
	return 0;
}

【UVA】1346 - Songs(贪心)

根据题意可以得到,长度小,并且频率低的排到前面,所以设 k = l  / q; 之后sort排序就可以 14128675 1346 Songs Accepte...
  • u013451221
  • u013451221
  • 2014年09月01日 19:33
  • 591

UVA 1346 - Songs (贪心)

题意:n张唱片,每张都有id,长度和频率,要求题目中公式值最小。 求一个排序,输出该排序下第m张CD的id。 解析: 证明: sum = b[1]+...+b[n] , 令b[i]= f[i]*(a...
  • HelloWorld10086
  • HelloWorld10086
  • 2015年02月04日 16:07
  • 443

UVA - 1346 Songs 贪心

题目大意:给出n首歌曲,每首歌曲有相对应的ID,长度L和频率F,现在要讲这n首歌曲刻录在一张唱片上,要求sum的值达到最小,问该如何刻录 sum = ∑i=1n\displaystyle \sum^...
  • L123012013048
  • L123012013048
  • 2015年03月18日 16:10
  • 314

uva 1346 - Songs(贪心)

题目链接:uva 1346 - Songs 题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q。想在John Doe 想...
  • u011328934
  • u011328934
  • 2013年12月10日 22:02
  • 1280

uva 1346 Songs(贪心)

uva 1346 Songs 题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q。想在John Doe 想将磁带...
  • llx523113241
  • llx523113241
  • 2015年02月04日 14:46
  • 509

UVA - 1346 Songs 简单贪心

要说的就是题意,给定的公式中 s[ i ] 看做 下标 i 就好, 再要说的就是分析下公式就能知道满足要求的方法是: 时间长度 L 短的, 频率 F 高的 往前放,也就是 L / F 越小越往前放,...
  • xiang_6
  • xiang_6
  • 2017年08月17日 09:31
  • 80

1346 - Songs (贪心)

John Doe is a famous DJ and, therefore, has the problem of optimizing the placement of songs on his ...
  • u011217342
  • u011217342
  • 2013年12月10日 20:50
  • 1373

UVa 1346 - Songs

题意 有N个唱片,每个唱片有ID,长度和频率 sum = f[i] * (len[i] + len[i + 1]..... + len[n]),求sum最小的时候第k个唱片的id。 ...
  • u014247806
  • u014247806
  • 2014年09月20日 13:59
  • 502

uva 1346 Songs

题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q。想在John Doe 想将磁带上的歌曲重新排列,方便播放,播放所有歌曲有一个复...
  • qq_38183886
  • qq_38183886
  • 2017年08月16日 19:52
  • 62

UVA 1346 - Songs

/*     这是一个贪心的题目,要求求出最小的sum = b1+..+bn  ,bi= fi*(a1+..+ai); 假设以求出最小的sum  得到了最优序列 那么 bi+b[i+1] = fi...
  • chenchaoflight
  • chenchaoflight
  • 2013年02月25日 20:30
  • 725
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 1346 Songs (贪心好题)
举报原因:
原因补充:

(最多只允许输入30个字)