C:试题 数轴上的n条线段最大价值和

问题描述
  给出在数轴上的n条线段的左右端点的坐标l,r和它们的价值v,请你选出若干条没有公共点的线段(端点重合也算有公共点),
使得它们的价值和最大,输出最大价值和。
输入格式
  第一行一个正整数n。

接下来n行,每行三个整数l,r,v分别表示一条线段的左端点,右端点和价值。l<r,v>0。
输出格式
  输出一个整数表示最大价值和。
样例输入
4
1 3 4
3 5 7
5 7 3
2 6 8
样例输出
8

暴力搜。。。

#include <stdio.h>
int n;
int left[2000];
int right[2000];
int value[2000];
	int i;
	int k;
	int max,FRE,sum;

int address[2000];

int search(int ori,int fre)
{
	int j;
	int sums=0;
	if(fre==0)
	{
	         i=0;
		for(j=0;j<FRE;j++)
		{
			sums+=value[address[j]];
			if(sums>sum)
			{
				if(judge(FRE)==1)
				{
					sum=sums;return 1;
				}
				else return 0;
			}
		}
		return 0;
		
	}
	else
	{
		for(j=ori;j<n-(fre-1);j++)
		{
			address[i]=j;i++;
		    search(ori+1,fre-1);	
		}
	}	
}

int judge(int x)
{
	int x1,x2,result;
	for(x1=0;x1<x-1;x1++)
	for (x2=0;x2<x;x2++)
	if(!((left[address[x1]]>right[address[x2]])||(left[address[x2]]>right[address[x1]])))return 0;
	return 1;	
}

int main()
{
 freopen("in.txt","r",stdin); 
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d %d %d",&left[i],&right[i],&value[i]);
	
 max=0;
for(FRE=1;FRE<n;FRE++)
{
	i=0;
	search(0,FRE);
	//if judge, compute value
	}	
	printf("%d\n",sum);		
return 1;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值