日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1443:【例题4】Addition Chains

發(fā)布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1443:【例题4】Addition Chains 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 必不可少的題干 然而并沒有什么鳥用

題干解析

  • 沒啥,暴搜,思路詳見代碼

剪枝

  • ps.不懂請留言 然而并不一定能及時被看見
  • 剪枝1:迭代搜索,層數(shù)超了就返回。
  • 剪枝2:上限判斷,如若剩余數(shù)的最大值加一起也小于n,返回。
  • 剪枝3:搜索順序,從大到小枚舉。
  • 剪枝4:如果當前值已經(jīng)大于n,返回。
  • 剪枝5~N:很多在循環(huán)條件中的小剪枝。
#include<bits/stdc++.h> using namespace std; int n,m,a[100001],u[100001],s[100001],ans; inline int check(int t,int k){for(int i=t;i>=t/2;i--) if(u[k-a[i]]) return 0;return 1; } inline void jqsh(int t,int k){if(a[t]*(1<<(k-t+1))<n) return;if(a[t]>n||t>k) return;if(ans&&t>ans) return;if(a[t]==n){ans=t;for(int i=1;i<=ans;i++) s[i]=a[i];return;}for(int i=2*a[t];i>a[t];i--){if(check(t,i)==0){a[t+1]=i;u[i]=1;jqsh(t+1,k);a[t+1]=0;u[i]=0;if(ans) return;}}return; } int main(){for(;;){scanf("%d",&n);if(!n) return 0;a[1]=1;a[2]=2;ans=0;u[1]=u[2]=1;if(n==1) printf("1");else if(n==2) printf("1 2");else{for(int i=3;ans==0;i++)jqsh(2,i);for(int i=1;i<=ans;i++){printf("%d ",s[i]);s[i]=0;}}printf("\n");}return 0; }

總結(jié)

以上是生活随笔為你收集整理的1443:【例题4】Addition Chains的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。