01背包(动规)
/* 4 5 2 3 1 2 3 4 2 2 _____ 7 */ #include<iostream> #define MAX 1000 using namespace std; int max(int n1, int n2){return n1>n2?n1:n2;} int dp[MAX][MAX], n, m, w[MAX], v[MAX]; int rec(int i, int j) { if(dp[i][j]>=0) return dp[i][j]; int res; if(i==n){ res=0; }else if(j<w[i]){ res = rec(i+1, j); }else { res = max(rec(i+1, j), rec(i+1, j-w[i])+v[i]); } return dp[i][j]=res; } int main() { int i, j, ans; cin>>n >> m; for(i=0; i<n; i++) cin>>w[i] >>v[i]; memset(dp, -1, sizeof(dp)); ans = rec(0, m); cout<<ans<<endl; system("pause"); return 0; }
世上无难事,只要肯登攀。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步