考试的时候手摸完全背包
结果被最后一个点搞了
因为我靠循环变量<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; }