|
- #include<iostream>
- using namespace std;
- #define FOR(i,n,m) for(int i=n;i<=m;i++)
- #define For(i,n,m) for(int i=n;i>=m;i--)
- int k,m,n,x,y,c,cc;
- int v[5005],w[5005],t[52];
- long long ans,f[5005][52];
- int main()
- {
- cin>>k>>n>>m;FOR(i,1,m) cin>>v[i]>>w[i];
- FOR(i,0,n+1) FOR(j,0,k+1) f[i][j]=-1;
- f[0][1]=0;FOR(i,1,m) For(j,n,v[i])
- {
- x=1;y=1;cc=0;
- FOR(h,1,k)
- {
- if(f[j][x]>=f[j-v[i]][y]+w[i]&&f[j][x]!=-1)
- {t[h]=f[j][x++];cc++;}
- else if(f[j][x]<f[j-v[i]][y]+w[i]&&f[j-v[i]][y]!=-1)
- {t[h]=f[j-v[i]][y++]+w[i];cc++;}
- else break;
- }
- FOR(h,1,cc) f[j][h]=t[h];
- }
- FOR(i,1,k)
- {
- if(f[n][i]==-1) break;
- ans+=f[n][i];
- }
- cout<<ans;
- return 0;
- }
复制代码 |
|