• HihoCoder


    描述

    给定 n 根木棍,第 i 根长度为 ai

    现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断

    请你求出最多能拼出几个

    输入

    第一行一个正整数 n

    第二行 n 个正整数 a1 … an

    1 ≤ n ≤ 15

    1 ≤ ai ≤ 109

    输出

    输出最多能拼出几个三角形

    样例输入
    6
    2 2 3 4 5 6
    样例输出
    2

    思路:最开始一直在像贪心,最后没写出来。 我们要知道的是,并不是每次都选择长度相邻的三个。 因为最小的一条边可能还不够小导致了浪费。

    状压DP:我们先把合法的三边组合找出来,然后跑背包。 复杂度C(N,3)*2^N

    #include<bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int maxn=1000010;
    int a[maxn],q[maxn],dp[maxn],cnt,ans;
    int main()
    {
        int N; scanf("%d",&N);
        rep(i,0,N-1) scanf("%d",&a[i]);
        sort(a,a+N);
        rep(i,0,N-1) rep(j,i+1,N-1) rep(k,j+1,N-1)
          if(a[i]+a[j]>a[k]) q[++cnt]=(1<<i)|(1<<j)|(1<<k);
        rep(i,1,cnt)
         for(int j=(1<<N)-1;j>=0;j--)
            if(!(j&(q[i]))) dp[j|q[i]]=max(dp[j|q[i]],dp[j]+1);
        rep(i,0,(1<<N)-1) ans=max(ans,dp[i]);
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    Docker
    dcoker-componse-2
    MyBatis的基本使用
    SpringMVC实现文件上传和下载
    CF817E Choosing The Commander
    CSP 2020 游记
    COCI2014-2015 Contest#1 题目选做
    CF590D Top Secret Task
    LuoguP1937 [USACO10MAR]Barn Allocation G
    CF741C Arpa’s overnight party and Mehrdad’s silent entering
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10226599.html
Copyright © 2020-2023  润新知