这咋写呀?。。。。。。。。

A. 陶陶摘果子

Problem ID: 8103

Contest ID: 4303

必做题

Wrong Answer

时间: 1s 空间: 128 M

题目描述:

又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下s了。当然,每次摘苹果时都要用一定的力气。陶陶想知道在s<0之前最多能摘到多少个苹果。现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶陶摘一个苹果需要的力气yi,求陶陶最多能摘到多少个苹果。

输入格式:

第1行:两个数 苹果数n,力气s。

第2行:两个数 椅子的高度a,陶陶手伸直的最大长度b。

第3行~第3+n-1行:每行两个数 苹果高度xi,摘这个苹果需要的力气yi。

输出格式:

只有一个整数,表示陶陶最多能摘到的苹果数。

样例输入1:

8 15

20 130

120 3

150 2

110 7

180 1

50 8

200 0

140 3

120 2

样例输出1:

4

约定:

所有数据:n<=5000 a<=50 b<=200 s<=1000

1 个赞

用动态规划背包

1 个赞

这题是道必刷题,用模拟就可以

1 个赞
#include<bits/stdc++.h>
using namespace std;
int f[2000001],w[300001],c[300001];
int main()
{
	int i,j,n,m,x,y;
	cin>>n>>m;
	cin>>x>>y;
	for(i=1;i<=n;++i) cin>>c[i]>>w[i];
	for(i=1;i<=n;++i)
	if(x+y>=c[i])
	for(j=m;j>=w[i];--j)
	f[j]=max(f[j],f[j-w[i]]+1);
	cout<<f[m];
	return 0;
}

我的代码

1 个赞

这是基础版
有没有看题目

1 个赞

好吧,那也用不到动态规划吧(虽然我的代码比较长)

#include <iostream>
#include <algorithm>
using namespace std;
int n,a,b,s,x,y,a2[10000][3],sum=0;
int main() 
{
	int i,j,k;
	cin>>n>>s>>a>>b;
	if(n==0 && s==0 && a==0 && b==0)
	{
		cout<<0;
		return 0;
	}
	for(i=1;i<=n;i++)
	{
		cin>>a2[i][1]>>a2[i][2];
		if(a2[i][1]>a+b)
		{
			a2[i][2]=1001;
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n-i;j++)
		{
			if(a2[j][2]>a2[j+1][2])
			{
				swap(a2[j][2],a2[j+1][2]);
				swap(a2[j][1],a2[j+1][1]);
			}
		}
	}
	i=1;
	while(s>=0 && i<=n)
	{
		s-=a2[i][2];
		sum++;
		i++;
	}
	sum--;	
	cout<<sum;
	return 0;
}
1 个赞

你不觉得动态规划更方便

1 个赞

谢谢

1 个赞

对新人不友好

1 个赞

虽然这可能是算法三学的但我也才算法二

1 个赞

怎么就基础版了?基础题都没力气

1 个赞

我说 Stugge写的是基础版

1 个赞