zoukankan      html  css  js  c++  java
  • A1103 Integer Factorization [dfs]

    在这里插入图片描述
    思路:fac[0]=0 fac[1]=1 fac[2]=4…先存fac数组,再对这个数组进行深度优先搜索。

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<stack>
    #include<string>
    #include<math.h>
    #include<algorithm>
    #include<map>
    #include<cstring>
    #include<set>
    using namespace std;
    int n, k, p, maxFacsum = -1;
    vector<int>fac, ans, temp;
    
    
    int power(int x)
    {
    	int ans = 1;
    	for (int i = 0; i < p; i++)
    	{
    		ans *= x;
    	}
    	return ans;
    }
    
    void init()
    {
    	int i = 0, temp = 0;
    	while (temp <= n)
    	{
    		fac.push_back(temp);
    		temp = power(++i);
    	}
    }
    
    void dfs(int index, int nowk, int sum, int facsum)
    {
    	if (sum == n && nowk == k)
    	{
    		if (facsum > maxFacsum)
    		{
    			ans = temp;
    			maxFacsum = facsum;
    		}
    		return;
    	}
    	if (sum > n || nowk > k) return;
    	if (index - 1 >= 0)
    	{
    		temp.push_back(index);
    		dfs(index, nowk + 1, sum + fac[index], facsum + index);
    		temp.pop_back();
    		dfs(index - 1, nowk, sum, facsum);
    	}
    }
    
    int main()
    {
    	cin >> n >> k >> p;
    	init();
    	dfs(fac.size() - 1, 0, 0, 0);
    	if (maxFacsum == -1) cout << "Impossible" << endl;
    	else
    	{
    		printf("%d = %d^%d", n, ans[0], p);
    		for (int i = 1; i < ans.size(); i++)
    		{
    			printf(" + %d^%d", ans[i], p);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    多校省选模拟33 C
    省选测试47 T2宝石(P5401 [CTS2019]珍珠) 题解
    省选测试39
    省选测试38
    省选测试37
    自嗨测试赛4
    自嗨测试赛3
    自嗨测试赛2
    自嗨测试赛1
    树状数组 学习笔记
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811982.html
Copyright © 2011-2022 走看看