P1926 小书童——刷题大军

来源:互联网 发布:淘宝购物车排序规则 编辑:程序博客网 时间:2024/05/03 03:23

QAQ
01背包求出完成作业所需要的最小时间。
然后再01求最大刷题数。

#include <cstdio>#include <iostream>using namespace std;int dp1[9999],dp2[9999];int zs[9999],zf[9999],st[9999];int main(){    int n,m,k,r;    scanf("%d%d%d%d",&n,&m,&k,&r);    for(int i=1;i<=n;i++)     scanf("%d",&st[i]);    for(int i=1;i<=m;i++)     scanf("%d",&zs[i]);     for(int i=1;i<=m;i++)     scanf("%d",&zf[i]);     for(int i=1;i<=m;i++)     for(int j=r;j>=zs[i];j--)      dp1[j]=max(dp1[j],dp1[j-zs[i]]+zf[i]);    int time;    for(int i=0;i<=r;i++)     if(dp1[i]>=k)     {        time=i;        break;     }     for(int i=1;i<=n;i++)     for(int j=r-time;j>=st[i];j--)      dp2[j]=max(dp2[j],dp2[j-st[i]]+1);    printf("%d",dp2[r-time]);    //printf("%d ",time);}