洛谷1036選數總結

2021-10-09 13:23:44 字數 755 閱讀 9899

思路總結:

本題還是典型的dfs題目,關鍵在於狀態空間的選取,我想了想,用void dfs(int now,int sum),其中now表示從n個數中選取k個數,相當於放在k個位置,now即代表第幾個位置,sum表示求和,但是在for迴圈選數的時候,思路卡了殼,原因就是每次都是從1~n選取,會有數的重複,時間複雜度也不划算,看了下題解,發現別人用的是void dfs(int x,int y)表示,其中x表示已經選了幾個數,當xk時,表示k個數已經全部選取完畢了,y表示從第幾個數開始選取,for迴圈:for(int i=y;i<=n;i++),每找到乙個就向前+1.這樣可以避免從1開始重複選取,dfs(x+1,i+1);

**:#include

using namespace std;

#define n 0x3f

bool vis[25],vis2[n],f[25]; 分別記錄xn,和求和結果

int a[25],n,k,count1=0,p[25],sum=0;

void isprime(int sum)

}if(!flag) count1+=1;

return ;

}void dfs(int x,int y) //x為已經選了幾個數,y為選第幾個數

}int main()

{cin>>n>>k;

for(int i=1;i<=n;i++) cin>>a[i];

dfs(1,0,1);

printf("%d\n",count1);

return 0;

洛谷1036 選數(DFS

已知 nn n 個整數 x1,x2,xnx 1,x 2,x nx1 x2 xn 以及 11 1 個整數 kk k k k n 從 nn n 個整數中任選 kk k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3n 4,k 3n 4,k 3 44 4 個整數分別為 3,7,12,193,7,...

洛谷P1036 選數

已知 n 個整數 x1,x2,xn,以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34。...

洛谷 P1036選數

已知 n 個整數 x1,x2,xn以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29。輸入格式 鍵盤輸入,格式為 n,k 1 n 20,kx1,x2,xn 1 x...