P3799 妖梦拼木棒——洛谷(疑问)

题目背景

上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。

题目描述

有 �n 根木棒,现在从中选 44 根,想要组成一个正三角形,问有几种选法?

答案对 109+7109+7 取模。

输入格式

第一行一个整数 �n。

第二行往下 �n 行,每行 11 个整数,第 �i 个整数 ��ai​ 代表第 �i 根木棒的长度。

输出格式

一行一个整数代表答案。

输入输出样例

输入 #1复制

4 
1
1
2
2

输出 #1复制

1

说明/提示

数据规模与约定
  • 对于 30%30% 的数据,保证 �≤5×103n≤5×103。
  • 对于 100%100% 的数据,保证 1≤�≤1051≤n≤105,1≤��≤5×1031≤ai​≤5×103。

想法:

有点像dfs求组合数,于是有了如下代码。但是全超时了,样例能过,不知能不能这么写。不过应该没问题,毕竟是把所有的木棍组合列出来看满足条件没。

代码:

#include
using  namespace std;
int mg[100010];//木棍
//int st[100010]; 可以不要
int ans=0;
int n; 
int a[5];//存选的木棍
void dfs(int wz,int x){
    if(wz>4){
        if(a[2]+a[1]==a[3]&&a[3]==a[4])
            ans++;
        return ;
    }
    for(int i=x;i<=n;i++){
        //if(st[i]) continue;
        //st[i]=1;
        a[wz]=mg[i];
        dfs(wz+1,i+1);
        //st[i]=0;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>mg[i];
    sort(mg+1,mg+n);
    dfs(1,1);
    cout< }

你可能感兴趣的:(算法)