Comet OJ


考试的时候手摸完全背包

结果被最后一个点搞了

因为我靠循环变量<k,应该是<=k,结果因为还有点事走了

全部白给XD

#include<bits/stdc++.h>
using namespace std;
#define fmax(x) memset(x,0x3f,sizeof(x))
#define fmin(x) memset(x,-0x3f,sizeof(x))
const int inf=0x3f3f3f3f;
#define ll long long
struct node{int a,b;}at[200010];
int num[200010],val[200010],bol[200010],f[101][6015],n,k,m,ans;
int main()
{
    fmin(f);
    cin>>n>>m>>k;
    for(int i=0;i<=k;i++){cin>>val[i];bol[val[i]+i]=val[i];}
    for(int i=1;i<=m;i++)cin>>at[i].a>>at[i].b;
    f[1][0]=0;
    for(int i=2;i<=n;i++)
        for(int j=6010;j>=0;j--)
        {
        for(int tk=0;tk<=k;tk++)if(j-val[tk]==tk)f[i][j]=max(f[i-1][j-val[tk]],f[i][j]);
        f[i][j]=max(f[i][j],f[i-1][j]);
        for(int kk=1;kk<=m;kk++)
        if(j>=at[kk].a)f[i][j-at[kk].a]=max(f[i][j-at[kk].a],f[i][j]+at[kk].b);    
        }
    for(int i=0;i<=6010;i++)ans=max(f[n][i]+i+val[i],ans);
    cout<<ans;
}
原文地址:https://www.cnblogs.com/SFWR-YOU/p/11581157.html