贪心。。。排序。。。动态规划。。。待续。。。 下面的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;
}