dfs 求条

P1048 [NOIP2005 普及组] 采药

@[CNMIOS](/user/1070915) 此题没必要用回溯,用01背包即可。 ```cpp #include<bits/stdc++.h> using namespace std; int M,T,w[100001],v[100001],f[100001]; int main(){ cin>>T>>M; for(int i=1;i<=M;i++) scanf("%d%d",&w[i],&v[i]); for(int i=1;i<=M;i++){ for(int j=T;j>=w[i];j--){ f[j]=max(f[j],f[j-w[i]]+v[i]); } } cout<<f[T]; return 0; } ```
by tuxxx @ 2024-05-29 22:51:52


@[CNMIOS](/user/1070915) 应该加个变量记录最大价值吧 ```cpp #include<iostream> using namespace std; int t,m,ans,maxans=0; int a[105],b[105]; void dfs(int x,int y){ if(y>m){ maxans=max(maxans,ans); return; } if(x-a[y]>=0){ ans+=b[y]; dfs(x-a[y],y+1); ans-=b[y]; } dfs(x,y+1); } int main(){ cin >> t >> m; for(int i=1;i<=m;i++){ cin >> a[i] >> b[i]; } dfs(t,1); cout << maxans; return 0; } ```
by sansesantongshun @ 2024-07-06 21:22:50


@[tuxxx](/user/371749) 别人要写 dfs 你说 01 背包,能不能不要发这种回复
by sansesantongshun @ 2024-07-06 21:24:43


@[sansesantongshun](/user/866613) thx 贴结
by CNMIOS @ 2024-07-08 09:46:02


|