diff --git a/day13/P1833/P1833.cpp b/day13/P1833/P1833.cpp index 34b6847..eda87c5 100644 --- a/day13/P1833/P1833.cpp +++ b/day13/P1833/P1833.cpp @@ -5,7 +5,7 @@ using namespace std; const int MAX_N=10000+5; int sh,sm,eh,em,W,n; int w[MAX_N],v[MAX_N],c[MAX_N]; -int dp[MAX_N][MAX_N]; +int dp[MAX_N]; int main(){ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); @@ -22,15 +22,15 @@ int main(){ for(int i=1;i<=n;i++){ if(c[i]==0){ for(int j=w[i];j<=W;j++){ - dp[i][j]=max(dp[i-1][j],dp[i][j-w[i]]+v[i]); + dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } }else{ - for(int j=1;j<=c[i];j++){ + for(int j=W;j>=w[i];j--){ for(int k=1;k*w[i]<=j&&k<=c[i];k++){ - dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]*k]+v[i]*k); + dp[j]=max(dp[j],dp[j-k*w[i]]+v[i]*k); } } } } - cout< +#include +#include +#include +#include +using namespace std; + +const int MAX = 200+5; +int n,M,T; +int m[MAX],t[MAX]; +int readint(); +int dp[MAX][MAX]; + +int main(){ + n=readint(),M=readint(),T=readint(); + for(int i=1;i<=n;i++){ + m[i]=readint(),t[i]=readint(); + } + for(int i=1;i<=n;i++){ + for(int j=M;j>=1;j--){ + for(int k=T;k>=1;k--){ + dp[j][k] = dp[j][k]; + if(j>=m[i]&&k>=t[i]){ + dp[j][k] = max(dp[j][k],dp[j-m[i]][k-t[i]]+1); + } + } + } + } + cout<