林士钧
(林士钧)
1
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 个赞
#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 个赞
栗子酱
(栗栗子)
7
好吧,那也用不到动态规划吧(虽然我的代码比较长)
#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 个赞