[낙 곡] P1120 작은 나무 막대기 [데이터 강화 판]

전송 문
이 문 제 는 데 이 터 를 강화 하기 때문에 블 로그 의 이전 문 제 는 이 문제 의 시간 복잡 도 를 만족 시 키 지 못 한다. 물론 폭력 을 사용 하지만 가 지 를 많이 잘라 야 한다.
  • 가지치기 1: 나무 막대 기 를 큰 것 에서 작은 것 으로 정렬 하면 검색 할 가능성 이 적다.
  • 가지치기 2: 가장 큰 나무 막대기 부터 매 거 진 것 입 니 다. 나무 막대기 의 길이 의 합 / 2 까지 최 악의 경우 모든 나무 막대기 가 자신 과 만 어 울 리 기 때문에 이런 상황 은 마지막 에 수출 하고 두 가지 조합 입 니 다. 그래서 답 은 총화 / 2 입 니 다. 이렇게 하면 차이 가 절반 도 안 되 는 복잡 도 를 줄 일 수 있 습 니 다.
  • 가지치기 3: 앞 t - 1 개의 나무 막대 기 를 모두 주문 하면 마지막 나무 막대 기 는 아무 생각 없 이 잘 어 울 릴 수 있 습 니 다.
  • 가지치기 4: 검색 범 위 를 좁 히 지만 매번 s = = m 일 때 초기 화 하 는 것 을 기억 하 세 요.
  • 가지치기 5: 나무 막대 기 를 사용 한 적 이 있 거나 현재 나무 막대 와 합 쳐 우리 가 원 하 는 나무 막대 의 길 이 를 초과 하면 선택 하지 않 습 니 다.
  • 가지치기 6: 만약 에 제 가 현재 가지 고 있 는 나무 막대기 가 위의 나무 막대기 와 똑 같 고 위의 나무 막대기 가 답 을 얻 지 못 한다 면 저 는 이것 도 안 됩 니 다!
  • 가지치기 7: 만약 에 제 가 현재 의 길이 와 뒤의 모든 나무 막대기 의 길 이 를 모 으 지 못 하면 이런 방법 을 포기 할 수 있 습 니 다.
  • 가지치기 8: 현재 상태 (새로운) 에서 새 나무 막대 기 를 찾 지 못 하면 번복 합 니 다.
  • 가지치기 9: 만약 에 내 가 지금 이 나무 막대 기 를 합 쳐 야 m 를 모 을 수 있다 면 뒤에 못 모 을 거 야!구체 적 으로 코드 보기:
  • //  P1120    
    #include
    #include
    #include
    int n,cnt,sum,maxx,t,m;
    int a[100],p[110];
    bool b[100];
    using namespace std;
    int cmp(const int&a,const int&b) {
        return a>b;
    }
    void dfs(int l,int s,int last) {
        if(s==m) {//         
            s=0;//     
            l++;//           +1
            last=1;//            
        }
        if(l==t-1) {//   3   
            printf("%d
    "
    ,m);exit(0); } for(int i=last; i<=cnt; i++) {// 4 if(s+a[i]>m||b[i]) continue;// [ 5] if(a[i]==a[i-1]&&!b[i-1]) continue;// 6 if(s+p[i]return;// 7 [ !] b[i]=1; dfs(l,s+a[i],i+1); b[i]=0;// if(s==0)return;// 8 if(s+a[i]==m)return;// 9 } } void init() { int x; for(int i=1; i<=n; i++) { scanf("%d",&x); if(x<=50) { a[++cnt]=x;// sum+=x;// maxx=max(maxx,x);// } } } int main() { int i,j,k; scanf("%d",&n); init();// , 50 ! sort(a+1,a+n+1,cmp);// 1 for(i=n;i>=1;i--) p[i]=p[i+1]+a[i];// , for(i=maxx; i<=sum/2; i++) {// 2 if(sum%i==0) {// , t=sum/i;// m=i;// dfs(0,0,0);// } } printf("%d
    "
    ,sum);// , , return 0; }

    이 문 제 는 가지치기 연습 을 하 는 학생 들 에 게 적합 합 니 다. 확실히 좀 복잡 하지만 저 보다 더 빠 른 [2 점 답] 이 있 을 것 입 니 다. 여러분 이 써 주 셨 으 면 좋 겠 습 니 다!

    좋은 웹페이지 즐겨찾기