社区讨论
TLE on #30 ,谁能帮我卡掉最后3ms?
P1120[CERC 1995] 小木棍参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mia09m18
- 此快照首次捕获于
- 2025/11/22 16:06 3 个月前
- 此快照最后确认于
- 2025/11/22 16:57 3 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int t[N], n, maxi, mini, sum;
void dfs(int rst, int s, int ans, int p){
if(rst == 0){
printf("%d", ans);
exit(0);
}
if(s == ans){
dfs(rst - 1, 0, ans, maxi);
return;
}
for(int i = p; i >= mini; i --){
if(!t[i]) continue;
if(i + s > ans) continue;
t[i] --;
dfs(rst, s + i, ans, i);
t[i] ++;
if(s == 0 || s + i == ans) break;
}
return;
}
int main(){
scanf("%d", &n);
mini = N;
int x = 0;
while(n --){
scanf("%d", &x);
t[x] ++;
maxi = max(maxi, x);
mini = min(mini, x);
sum += x;
}
for(int i0 = maxi; i0 <= sum / 2; i0 ++){
if(sum % i0 == 0) dfs(sum / i0, 0, i0, maxi);
}
printf("%d", sum);
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...