题目意思很简单,羊肉需要x+y秒才能好,每次只能捞一片,之后需要至少m s后才能继续捞,其最多能捞几次
dp做:
#include<bits/stdc++.h>
using namespace std;
bool ok[3010];
int dp[3010];
inline void init()
{
memset ( ok, false, sizeof(ok) );
memset ( dp, 0, sizeof(dp) );
}
int main()
{
int T;
scanf ( "%d", &T );
while ( T-- )
{
int n,m;
scanf ( "%d%d", &n, &m );
for ( int i=1 ; i<=n ; i++ )
{
int x,y;
scanf ( "%d%d", &x, &y );
ok[x+y] = 1;
}
for ( int i=2000 ; i>=1 ; i-- )
{
dp[i] = dp[i+1];
if ( ok[i] )
dp[i] = max ( dp[i], dp[i+m]+1 );
}
printf ( "%d\n", dp[1] );
}
return 0;
}
然后是二分查找做的。。
#include<bits/stdc++.h>
using namespace std;
int a[1111];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
int sum=0,w,x,y;
for(int i=0; i<n; i++)
{
scanf("%d%d",&x,&y);
a[i]=x+y;
}
sort(a,a+n);
w=a[0];
x=0;
while(x<n)
{
x=lower_bound(a,a+n,w)-a;
if(x<n)
sum++,w=a[x]+m;
}
printf("%d\n",sum);
}
}