好了,ac了,我把第二重循环的终止条件改为了j>=t[p[i]],因为这里的滚动终止在第i个的做题时间
by AdGats @ 2019-12-08 21:15:57
最后时隔这么久还是把ac代码送给大家吧:
```cpp
#include<bits/stdc++.h>
using namespace std;
int read(){
char c;
int f=1,a=0;
c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
a=a*10+c-'0';
c=getchar();
}
return a*=f;
}
const int N=5e3+5;
int t[N],q[N],p[N],dp[N];
int main(){
int n,m,spc,spp,tt;
spc=read();
spp=read();
spc=spp/spc;
cin>>m>>n;
for(int i=1;i<=n;i++) t[i]=read()*spc;
for(int i=1;i<=m;i++){
p[i]=read();
q[i]=read();
}
cin>>tt;
for(int i=1;i<=m;i++){
for(int j=tt;j>=t[p[i];j--){
dp[j]=max(dp[j-t[p[i]]]+q[i],dp[j]);
}
}
printf("%d",dp[tt]);
return 0;
}
```
by AdGats @ 2020-02-21 21:41:18
可以借鉴莫抄啊
by AdGats @ 2020-02-21 21:42:40
@[tony_tzh](/user/209758) 做了个小手脚
by AdGats @ 2020-02-21 21:43:22