福特積極推進汽車電動化,向供應商施壓要求提供更多電池
阿新 • • 發佈:2021-10-31
不是一般的01揹包
因為有後效性,也就是因為重量可以是負的(鉤子越放越多)
為了抵消這種影響,按照鉤子數量從大到小排序
#include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<stack> #include<algorithm> using namespace std; template<class T>inline void read(T &x) { x=0;register char c=getchar();register bool f=0; while(!isdigit(c))f^=c=='-',c=getchar(); while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar(); if(f)x=-x; } template<class T>inline void print(T x) { if(x<0)putchar('-'),x=-x; if(x>9)print(x/10); putchar('0'+x%10); } int t; int a[2005]; int b[2005]; int n; int f[2001][2001]; int main(){ read(n); for(int i=1;i<=n;++i){ read(a[i]); read(b[i]); } memset(f,0xc0,sizeof(f)); f[0][1]=0; for(int i=1;i<=n;++i){ for(int j=0;j<=n;++j){ if(j+1>=a[i]) f[i][j]=max(f[i-1][j],f[i-1][j-a[i]+1]+b[i]); else f[i][j]=f[i-1][j]; if(j==a[i]){ f[i][j]=max(f[i][j],b[i]); } } } int ans=0; for(int i=0;i<=n;++i){ ans=max(ans,f[n][i]); } cout<<ans; return 0; }