简单的贪心题 新手入门= =

空无邪 2014-04-17 09:07:02



求大神解释一下。。。
...全文
223 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsjfdjoijvtghu 2014-04-18
  • 打赏
  • 举报
回复
/************************************************************
> Filenmae : game.c
> Author : DongHouHe

> Date : Thur 17.4.2014
************************************************************/
#include<stdio.h>
#include<assert.h>
#define M 100
#define P 100
int Q[1000][2]={0},n=0,m=1;
void Qiong(int num,int a[][2],int nnu)
{
int i,j,nn=0;
for(i=0;i<n+1;i++)
for(j=0;j<num;nn++,j++)
{
Q[m*200+nn][0]=Q[(m-1)*200+i][0]==0?a[j+nnu][0]:Q[(m-1)*200+i][0]<a[j+nnu][0]?Q[(m-1)*200+i][0]:a[nnu+j][0];Q[m*200+nn][1]=Q[(m-1)*200+i][1]+a[nnu+j][1];}
nn--;
n=nn;
m++;
}
void high(int nnn,int ppp,int Q[][2])
{
int i;
float result=0;
for(i=0;i<ppp;i++)
result=result<((float)Q[nnn*200+i][0]/Q[nnn*200+i][1])?((float)Q[nnn*200+i][0]/Q[nnn*200+i][1]):result;
printf("%.3f\n",result);

}

int main()
{
int game[M][2];
int kind[P],i,b,bb=0;
assert(scanf("%d",&kind[0]));
fflush(stdin);
for(i=0;i<kind[0];i++)
{
scanf("%d",&kind[i+1]);
for(b=0;b<kind[i+1];b++)
scanf("%d%d",&game[b+bb][0],&game[b+bb][1]);
Qiong(kind[i+1],game,bb);
bb+=kind[i+1];
fflush(stdin);
}
// assert(bb==GameSum);
high(m-1,n+1,Q);
return 0;
}


buyong 2014-04-18
  • 打赏
  • 举报
回复
这部就是每类都算一下,找个最大的,再吧所有最大的相加么?
空无邪 2014-04-18
  • 打赏
  • 举报
回复
引用 4 楼 u010211892 的回复:
/************************************************************
    > Filenmae : game.c
    > Author   : DongHouHe

    > Date     : Thur 17.4.2014
************************************************************/
#include<stdio.h>
#include<assert.h>
#define M 100
#define P 100
int Q[1000][2]={0},n=0,m=1;
void Qiong(int num,int a[][2],int nnu)
{
	int i,j,nn=0;
	for(i=0;i<n+1;i++)
		for(j=0;j<num;nn++,j++)
		{
			Q[m*200+nn][0]=Q[(m-1)*200+i][0]==0?a[j+nnu][0]:Q[(m-1)*200+i][0]<a[j+nnu][0]?Q[(m-1)*200+i][0]:a[nnu+j][0];Q[m*200+nn][1]=Q[(m-1)*200+i][1]+a[nnu+j][1];}
		nn--;
		n=nn;
		m++;
}
void high(int nnn,int ppp,int Q[][2])
{
	int i;
    float result=0;  
	for(i=0;i<ppp;i++)
		result=result<((float)Q[nnn*200+i][0]/Q[nnn*200+i][1])?((float)Q[nnn*200+i][0]/Q[nnn*200+i][1]):result;
	printf("%.3f\n",result);
	
}

int main()
{
	int game[M][2];
	int kind[P],i,b,bb=0;
	assert(scanf("%d",&kind[0]));
	fflush(stdin);
	for(i=0;i<kind[0];i++)
	{
		scanf("%d",&kind[i+1]);
		for(b=0;b<kind[i+1];b++)
			scanf("%d%d",&game[b+bb][0],&game[b+bb][1]);
		Qiong(kind[i+1],game,bb);
		bb+=kind[i+1];
		fflush(stdin);		
	}
	//	assert(bb==GameSum);
	high(m-1,n+1,Q);
	return 0;
}
能解释一下吗 没看懂= =
蓝色的杯子 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 wisdomfriend 的回复:
数据解释 1 3 --有3类有些 2 3 100 25 150 35 说明第一类游戏有3中, 第一种评价100, 价格25, 第二种 评级150,价格35 第3中评级80,价格25 3 ....... 答案 第一类要 150 35 第二类要 155 40 第三类要 120 110 输出 120 /(110 + 35 + 40) = 0.649 方案: 贪婪法 每类中药评价/价格最高的, 如果一类中有相同的,就要评价高的
是啊,有这个问题.
lsjfdjoijvtghu 2014-04-18
  • 打赏
  • 举报
回复
引用 5 楼 u013850910 的回复:
[quote=引用 4 楼 u010211892 的回复:]
/************************************************************
    > Filenmae : game.c
    > Author   : DongHouHe

    > Date     : Thur 17.4.2014
************************************************************/
#include<stdio.h>
#include<assert.h>
#define M 100
#define P 100
int Q[1000][2]={0},n=0,m=1;
void Qiong(int num,int a[][2],int nnu)
{
	int i,j,nn=0;
	for(i=0;i<n+1;i++)
		for(j=0;j<num;nn++,j++)
		{
			Q[m*200+nn][0]=Q[(m-1)*200+i][0]==0?a[j+nnu][0]:Q[(m-1)*200+i][0]<a[j+nnu][0]?Q[(m-1)*200+i][0]:a[nnu+j][0];Q[m*200+nn][1]=Q[(m-1)*200+i][1]+a[nnu+j][1];}
		nn--;
		n=nn;
		m++;
}
void high(int nnn,int ppp,int Q[][2])
{
	int i;
    float result=0;  
	for(i=0;i<ppp;i++)
		result=result<((float)Q[nnn*200+i][0]/Q[nnn*200+i][1])?((float)Q[nnn*200+i][0]/Q[nnn*200+i][1]):result;
	printf("%.3f\n",result);
	
}

int main()
{
	int game[M][2];
	int kind[P],i,b,bb=0;
	assert(scanf("%d",&kind[0]));
	fflush(stdin);
	for(i=0;i<kind[0];i++)
	{
		scanf("%d",&kind[i+1]);
		for(b=0;b<kind[i+1];b++)
			scanf("%d%d",&game[b+bb][0],&game[b+bb][1]);
		Qiong(kind[i+1],game,bb);
		bb+=kind[i+1];
		fflush(stdin);		
	}
	//	assert(bb==GameSum);
	high(m-1,n+1,Q);
	return 0;
}
能解释一下吗 没看懂= =[/quote] 题目是,输入几类,再依次输每类游戏的个数和评分和价格,没有指定每类的个数很头疼 我的算法是一个Q[][]数组存每类输完后的所有可能组合,下次就从Q[200][]存第二次输入完的所有组合,第三次从Q[400][]。。 最后计算,挑出最大的,算法的确不太正常,不清晰,但是是正确的。
zhou09039051698 2014-04-18
  • 打赏
  • 举报
回复
直接照题意每次选个最大的就可以了呗。。。
空无邪 2014-04-17
  • 打赏
  • 举报
回复
引用 2 楼 wisdomfriend 的回复:
数据解释 1 3 --有3类有些 2 3 100 25 150 35 说明第一类游戏有3中, 第一种评价100, 价格25, 第二种 评级150,价格35 第3中评级80,价格25 3 ....... 答案 第一类要 150 35 第二类要 155 40 第三类要 120 110 输出 120 /(110 + 35 + 40) = 0.649 方案: 贪婪法 每类中药评价/价格最高的, 如果一类中有相同的,就要评价高的
哥们你这个不行啊 (100,10) (50,9) (50,1) 这种的就不行啊
蓝色的杯子 2014-04-17
  • 打赏
  • 举报
回复
数据解释 1 3 --有3类有些 2 3 100 25 150 35 说明第一类游戏有3中, 第一种评价100, 价格25, 第二种 评级150,价格35 第3中评级80,价格25 3 ....... 答案 第一类要 150 35 第二类要 155 40 第三类要 120 110 输出 120 /(110 + 35 + 40) = 0.649 方案: 贪婪法 每类中药评价/价格最高的, 如果一类中有相同的,就要评价高的
空无邪 2014-04-17
  • 打赏
  • 举报
回复
求大神指教= =

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧