(这个题有一个很神奇的地方)
算法标签(显然01背包了最近一直在练)
(他居然没写……)
这个题啊,试了好几遍没a
最后发现在第二层循环的时候应该是j>=rqyt[p[i]]而不是j>=rqyt[i](因为时间t要大于的是做这个题所需要的时间)(在下面循环想到上面没想到)
ac代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<cmath> using namespace std; int rqy,zyx; int m,n; int rqyt[50001],p[100000],q[100000]; int t; int f[1000001]; int main() { cin>>rqy>>zyx; int a=zyx/rqy; cin>>m>>n; for(int i=1;i<=n;i++) {cin>>rqyt[i]; rqyt[i]*=a;} for(int i=1;i<=m;i++) cin>>p[i]>>q[i]; cin>>t; for(int i=1;i<=m;i++) { for(int j=t;j>=rqyt[p[i]];j--) { f[j]=max(f[j],f[j-rqyt[p[i]]]+q[i]); } } cout<<f[t]; }
(懒得写注释了你们自己理解吧)
致敬rqyzyx(两个钢铁直男)
end-