为何只有84???求大佬指点!!!

P2677 [USACO07DEC] Bookshelf 2 B

https://www.luogu.org/recordnew/show/20310024
by Donaghy @ 2019-07-05 09:29:33


你要把每一个可能的结果算出来 ```cpp for(int i=1;i<=n;i++){ if(book[i]==0){ book[i]=1; dfs(i,h+nainiu[i]); book[i]=0; } } ``` 不能只判断x+1,x+2
by Ew_Cors @ 2019-07-05 10:15:31


完整代码 ```cpp #include<iostream> using namespace std; long long minn=100000,nainiu[25]; int n,b; bool book[25]; void dfs(int nnbh,long long h){ if(h>=b){ if(h-b<minn){ minn=h-b; } return; } book[nnbh]=1; for(int i=1;i<=n;i++){ if(book[i]==0){ book[i]=1; dfs(i,h+nainiu[i]); book[i]=0; } } book[nnbh]=0; return; } int main(){ cin>>n>>b; for(int i=1;i<=n;i++){ cin>>nainiu[i]; } for(int i=1;i<=n;i++){ dfs(i,nainiu[i]); } cout<<minn; return 0; } ```
by Ew_Cors @ 2019-07-05 10:18:03


@[鬼畜UKE自动机](/space/show?uid=180103) 谢谢dalao
by Donaghy @ 2019-07-05 10:31:48


你可以这样,那样,最后在那样就做出来了@[Donaghy](/space/show?uid=203762)
by ruoran @ 2019-07-05 10:32:13


我不是大佬qwq
by Ew_Cors @ 2019-07-05 20:37:02


建议你这样做比较清楚一点: ```cpp void dfs(int start,int cnt){ if(cnt == 0){ if(sum >= m) minn = min(minn,sum - m); return; } for(int i = start;i <= n - cnt + 1;i++){ sum += a[i]; dfs(i + 1,cnt - 1); sum -= a[i]; } } for(int i = 1;i <= n;i++){ int j = i; dfs(1,j); }
by LYM20114 @ 2021-10-15 17:05:32


@[Donaghy](/user/203762) cout << 0 << endl也有84.。。。就很离谱
by sunfather @ 2022-01-29 21:19:04


|