码迷,mamicode.com
首页 > 其他好文 > 详细

uva 10670 Work Reduction(贪心)

时间:2015-08-06 22:23:37      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

我就知道肯定能A,但凡觉得浪费了好长时间的时候都会去认真做一些事情,这道题目,亦如是,从我认真读题开始压

没想着找题解看题意看思路。其实这道题目也算不上难,通过率有百分之四十。以后都得这样专心读题目,专心想解法。技术分享

思路:

贪心,关键是选择A方案还是B方案,A方案是每次代理一份作业花费n,B方案是每次代理一般方案(若16

17,则代理8个)花费m,其实这道题能判断出来什么时候该选哪个方案就基本上解决了。只有当代理一般后不小

于目标的分数且比用A方案代理一半所花费的更少时才选用B方案,否则都应该选用A方案。这里似乎简单一些了,目

标是一个定值必须最终达到这个值。然后我竟然是第一次用结构体里面写数组,赋值,输出。。。好了,既然写过以

后就应该会了。。

贴代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<algorithm>

using namespace std;
struct node
{
	char a[20];//记录字母 
	int m,n;
	int cost;
}b[105];
int cmp(const void *a,const void *b)
{
	if(((node *)a)->cost == ((node *)b)->cost)
		return strcmp(((node *)a)->a,((node *)b)->a);
	return ((node *)a)->cost - ((node *)b)->cost;
}

int main()
{
	int T,x,y,i,j,k;
	char ch;
	cin >> T;
	int cnt = 0;
	while(T--)
	{
		cnt++;
		cin >> x >> y >> k;
		//getchar();
		memset(b,0,sizeof(b));
		for(i=1; i<=k; i++)
		{
			j = 0;
			getchar();//必须有,处理掉缓冲区的换行符 
			while(ch = getchar(), ch != ':')
			{
				b[i].a[j++] = ch;//注意结构体内a数组的输入 
			}
			b[i].a[j] = '\0';//不能忘,得给字符数组加结束标志 
			scanf("%d,%d",&b[i].n,&b[i].m);
		}
	//	cout<<"********************\n";
/*		for(i=1; i<=k; i++)
		{
			cout << b[i].a << ": ";
			cout << "m = " << b[i].m << " " <<"n = " << b[i].n<<endl;
		}
*/	
		//cout<<"********************\n";
		int xx , yy;
		for(i=1; i<=k; i++)
		{
			xx = x, yy = y;
			while(xx != 0)
			{
				if((xx/2 >= yy)&&((xx-xx/2)*b[i].n>=b[i].m))
				{
					xx = xx/2;
					b[i].cost += b[i].m;
				}
				else 
				{
					b[i].cost += (xx-yy)*b[i].n;
					xx = 0;
				}
			}
			
		}
		qsort(b+1,k,sizeof(b[0]),cmp);
	//	cout<<"********************\n";
		/*for(i=1; i<=k; i++)
		{
			cout << b[i].a << ": ";
			cout << "cost = " << b[i].cost << endl;
		}*/
		//cout<<"********************\n";
		cout << "Case " << cnt << endl;
		for(i=1; i<=k; i++)
		{
			cout << b[i].a << " " << b[i].cost<<endl;//注意结构体内a数组的输出 
		}
	} 
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

uva 10670 Work Reduction(贪心)

标签:

原文地址:http://blog.csdn.net/sinat_22659021/article/details/47323179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!