⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku 3404 贪心的方法选择.txt

📁 ACM资料大集合
💻 TXT
字号:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

//PKU 3404 贪心的方法选择
#define NMAX 55
#define INFI 99999
#define MH make_heap
#define OH pop_heap
#define PH push_heap
#define PB push_back
#define OB pop_back

bool cmp(int a,int b)
{
	return a<b;
}

int ti[NMAX];

void solve(int num)
{
	int ans=0,f1,f2,s1,s2,knum=num;//最快,次快,最慢,次慢
	sort(ti+1,ti+1+num,cmp);
	f1=1;f2=2;s1=num;s2=num-1;
	while(knum>=4)
	{	//每次借助快的人,让最满、次满过,有两种方法
		if(ti[f1]*2+ti[s1]+ti[s2]<ti[f1]+ti[f2]*2+ti[s1])//最快带最慢+最快回+最快带次慢+最快回更好
			ans+=ti[f1]*2+ti[s1]+ti[s2];
		else ans+=ti[f1]+ti[f2]*2+ti[s1];//最快跟次快一起过+最快回+最慢跟次慢一起过+次快回更好
		knum-=2;
		s1-=2;s2-=2;
//		printf("ans=%d\n",ans);
	}
	if(knum==3) ans+=ti[1]+ti[2]+ti[3];
    else if(knum==2) ans+=ti[2];
	else if(knum==1) ans+=ti[1];
	printf("%d\n",ans);	
}

int main()
{	int i,num;
	scanf("%d\n",&num);
	for(i=1;i<=num;i++) scanf("%d",&ti[i]);
	solve(num);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -