1 条题解
-
1
美味糖果
题意
小青有 n 颗糖果,第 i 颗糖果的基础美味值为 a_i 。
她会按某种顺序吃完所有糖果。第一颗糖果不会产生额外美味值。
如果当前吃的糖果美味值为 a_i ,上一颗吃的糖果美味值为 a_{i-1} ,那么这一次额外获得的美味值 为:
求一种吃糖顺序,使总额外美味值最大。
思路
本题 n <= 8 ,数量非常小,可以直接枚举所有情况,我们使用dfs来搜索所有情况。
对每一种排列,计算相邻两颗糖果产生的额外美味值总和,取最大值即可。
注意答案可能较大,使用 long long 。
复杂度
时间复杂度: O(n! * n)
空间复杂度: O(n)
参考代码:#include<bits/stdc++.h> using namespace std; int vis[10]; int ans; int res; int n; int a[10]; void dfs(int len,int lst) { if(len==0) { ans=max(ans,res); return; } for(int i=1;i<=n;i++){ if(vis[i]) continue; vis[i]=1; if(lst!=0){ res+=(a[i]-a[lst])*(a[i]-a[lst])+2*(a[i]+a[lst]); } dfs(len-1,i); vis[i]=0; if(lst!=0){ res-=(a[i]-a[lst])*(a[i]-a[lst])+2*(a[i]+a[lst]); } } } int main() { // freopen("test9.in","r",stdin); // freopen("test9.out","w",stdout); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(n,0); cout<<ans; }求赞,谢谢!
- 1
信息
- ID
- 2936
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 97
- 已通过
- 23
- 上传者