NOIP 考後歡樂賽 T1 Mr.Lee 的評測機
阿新 • • 發佈:2018-12-13
連結
https://www.luogu.org/problemnew/show/U54181
大意
有
個東西和一個一秒能算
下的評測機,選擇某個東西需要花費
點時間使得評測機每秒多計算
次,有
道題,A掉第
道題需要在
點時間內完成
次運算,問升級後的評測機能A掉幾道題
思路
用01揹包求出 時間內最多能升級的 ,後面 掃描即可
程式碼
#include<algorithm>
#include<cstdio>
#include<cctype>
using namespace std;int f[30001],n,m,k,p,c,v,t,w,ans;
inline char Getchar()
{
static char buf[100000],*p1=buf+100000,*pend=buf+100000;
if(p1==pend)
{
p1=buf; pend=buf+fread(buf,1,100000,stdin);
if (pend==p1) return -1;
}
return *p1++;
}
inline int read()
{
char c;int d=1,f=0;
while(c=Getchar(),!isdigit(c))if(c==45)d=-1;f=(f<<3)+(f<<1)+c-48;
while(c=Getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
return d*f;
}
inline void write(register long long x)
{
if(x<0)write(45),x=-x;
if(x>9)write(x/10);
putchar(x%10+48);
return;
}//以上為輸入輸出優化
signed main()
{
n=read();m=read();k=read();p=read();
for(register int i=1;i<=n;i++)
{
v=read();c=read();
for(register int j=m;j>=v;j--) f[j]=max(f[j],f[j-v]+c);//01揹包
}
p+=f[m];//評測機升級
for(register int i=1;i<=k;i++)
{
t=read();w=read();
if(t*p>=w) ans++;//能A掉
}
if(ans==k) puts("AC");else
write(ans);
}