耐心爱上你

贪心。。。排序。。。动态规划。。。待续。。。  下面的3个题是我从周一就开始做的,怎奈基础太薄弱,到现在也没能独立写下来。这周马上就要结束了,连模仿带创造性的试探,算是把代码给折腾出来了,但是还是生生的。。。不是很懂。。。 七点按最近的那个计划 完成任务 开会一个多小时。。。。明天继续。。。加班ing~~

//喷水装置(二)
//一下午一直在处理 字符问题 算法问题。。。慢慢的学着耐心。。。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

//#define max(a,b) (a)>(b)?(a):(b);//由大到小 最右
struct nodle
{
	float x,y;
}a[10001];

bool cmp(const nodle &a,const nodle &b)
	{return a.x<b.x;}//由小到大排序 最左

int main()
{
	int N;
	cin>>N;
	while(N--){
		int n;
		float len,width,xx,ri,l;
		cin>>n>>len>>width;
		for(int i=0;i<n;i++)
		{
			cin>>xx>>ri;
			if(ri<=width/2.0){i--;n--; continue;}	
			l=sqrt(ri*ri-width*width/4.0);
			a[i].x=xx-l>0?xx-l:0;
			a[i].y=xx+l<len?xx+l:len;
		}
		sort(a,a+n,cmp);//从最左开始
		//double l=0,r=0,count=0;
		//for(int i=0;i<n&&r<=len;i++)
		//{
		//	if(a[i].x<=l) {
		//		r=max(a[i].y,r);//点儿的限制呀呀。。。。
		//	}count++;
		//	l=r;
		//	if(a[i].x<=l) {
		//		r=max(a[i].y,r);}
		//	else break;
		//	
		//}
		float start=0;
		int count=0,i,k=-1;
		  while(start <len && a[k+1].x <= start)  
        {  
            float mmax = -1;  
            for(i = k+1;a[i].x<= start && i<n;i++)  
                if(mmax < a[i].y)  
                {  
                    mmax = a[i].y;  
                    k = i;  
                }  
            start = mmax;  
			count++;
		  }
		if(start>=len)
			cout<<count<<endl;
		else 
			cout<<"0"<<endl;
	}
	return 0;
}


//背包问题
//思路很简单 取单位价值最大的物品 使其不超过背包最大容量
//代码实现能力弱爆了 这个是借用的人的外壳 那个类和函数都还木用熟
//不用函数调用比较循环太多 很随意的就超时了。。。
#include<iostream>
#include<algorithm>
using namespace std;

struct Tool
{
	int v,w;
}tool[11];

bool cmp(const Tool &a,const Tool &b){
	return a.v>b.v;
}

int main()
{
	int n;
	cin>>n;
	while(n--){
		int s,m,sum=0,total=0;
		cin>>s>>m;
		for(int i=0;i<s;i++)
			cin>>tool[i].v>>tool[i].w;
		sort(tool,tool+s,cmp);//这到底是神魔问题 编译器不喜欢
		for(int i=0;i<s;i++)
		{
			sum+=tool[i].w;
			if(sum<m)
				total+=tool[i].w*tool[i].v;
			else
			{
				total+=tool[i].v*(m-sum+tool[i].w);
				break;
			}
		}
		cout<<total<<endl;
	}
	return 0;
}

//会场安排
//狗血 清楚的知道我对你缺乏耐心 但真的是一点点儿的愈来愈有耐心。。。
//模仿的 希望自己完全独立的 用新的方法写几个
#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

struct activity
{
	int b,e;
}act[10000];

bool cmp(activity a,activity b)
{ return a.e<b.e;}//结束由早到晚

int main()
{
	int N;
	cin>>N;
	while(N--){
		int n,count=1,end;
		cin>>n;
		for(int i=0;i<n;i++)
			cin>>act[i].b>>act[i].e;
		sort(act,act+n,cmp);//这里编译器上显示有问题 可是允许处理???
		end=act[0].e;
		for(int i=1;i<n;i++)
		{
    //和喷水装置不同 不要覆盖
			if(act[i].b>end){
				end=act[i].e;
				count++;
			}
		}
		cout<<count<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值