1103. Integer Factorization (30)

原创 2015年11月21日 10:33:43

1.根据题目的特点,n的最大值不超过400,可以使用深度遍历搜索答案

2.加入限制条件进行剪枝,如i的p次方不能大于n-k+1,因为剩下的数至少均为1,剩下还需要k-1个数需要进行分配,每个数至少分配为1,共k-1,所以i的p次方最大只能为n-(k-1)=n-k+1,而最大值不能超过上一次分配的。


//#include<string>
//#include <iomanip>
#include<vector>
#include <algorithm>
//#include<stack>
#include<set>
#include<queue>
#include<map>
//#include<unordered_set>
#include<unordered_map>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
using namespace std;
void dfs(int n, int count, int p,int preNum, vector<int>&ans,int ansSum, vector<pair<int,vector<int>>>&totalAns, vector<vector<int>>&num)
{
	if (n == 0 && count == 0)
	{
		totalAns.push_back({ansSum, ans});
	}
	else if ((n == 0 && count != 0) || (n != 0 && count == 0))
		return;
	else
	{
		for (int i = min(n - count+1,preNum); i >= 1; i--)
		{//进行剪枝
			if (num[i][p - 1] != -1 && num[i][p - 1]<=n-count+1)
			{
				ans.push_back(i);
				ansSum += i;
				dfs(n - num[i][p - 1], count - 1, p,i, ans,ansSum, totalAns, num);
				ansSum -= i;
				ans.pop_back();
			}
		}
	}
}
bool cmp(const pair<int, vector<int>>&a, const pair<int, vector<int>>&b)
{
	if (a.first > b.first)
		return true;
	else if (a.first == b.first)
	{
		for (int i = 0; i < a.second.size(); i++)
		{
			if (a.second[i] > b.second[i]) return true;
			else if (a.second[i] < b.second[i]) return false;
		}

	}
	else return false;
}
int main(void)
{
	
	int n, k, p;
	cin >> n >> k >> p;
	vector<vector<int>> num(401, vector<int>(7, 0));
	for (int i = 1; i < 401; i++)
	{
		num[i][0] = i;
		for (int j = 1; j < 7; j++)
		{
			if (num[i][j - 1] == -1) num[i][j] = -1;
			else
			{
				num[i][j] = num[i][j - 1] * i;
				if (num[i][j] > 400) num[i][j] = -1;
			}
		}
	}
	vector<int> ans(0);
	vector<pair<int,vector<int>>> totalAns(0);
	int ansSum = 0;

	dfs(n, k, p,n, ans,ansSum, totalAns, num);
	sort(totalAns.begin(), totalAns.end(), cmp);
	if (totalAns.size() != 0)
	{
		cout << n << " = ";
		for (int i = 0; i < totalAns[0].second.size(); i++)
		{
			cout << totalAns[0].second[i] << "^" << p;
			if (i != totalAns[0].second.size() - 1)
			{
				cout << " + ";
			}
		}
		cout << endl;
	}
	else 
	{
		cout << "Impossible" << endl;
	}

	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java进阶(三十四)Integer与int的种种比较你知道多少?

Integer与int的种种比较你知道多少?前言          如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类;int的初值为0,...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2016年07月19日 19:17
  • 46742

Factorization Machines 学习笔记(四)学习算法

最近学习了一种叫做 Factorization Machines(简称 FM)的通用算法,它可对任意的实值向量进行预测。其主要优点包括: 1) 可用于高度稀疏数据场景; 2) 具有线性的计算复杂度。本...
  • peghoty
  • peghoty
  • 2014年10月28日 10:22
  • 24309

Factorization Machines 学习笔记(一)预测任务

最近学习了一种叫做 Factorization Machines(简称 FM)的通用算法,它可对任意的实值向量进行预测。其主要优点包括: 1) 可用于高度稀疏数据场景; 2) 具有线性的计算复杂度。本...
  • peghoty
  • peghoty
  • 2014年10月28日 10:21
  • 20130

推荐系统学习笔记之一 综述

在推荐系统的系列笔记中预计将会简要记录这些:一些推荐系统的基础应用: Content Based Recommendation System 基于内容的推荐系统 Collaborative Filte...
  • asd136912
  • asd136912
  • 2017年10月17日 11:26
  • 243

Java(30):基础:Integer 与 int 的区别

Java(30):基础:Integer 与 int 的区别
  • qq_29166327
  • qq_29166327
  • 2017年11月19日 20:27
  • 44

Java 的Integer、int与new Integer到底怎么回事?

先做一些总结,询问了些经验比较多的师傅,在这里表示感谢,然后自己总结下,今天的收获分享给大家: 1. int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较。...
  • wangyang1354
  • wangyang1354
  • 2016年09月22日 16:27
  • 5758

Java中Integer的valueOf方法,-128到127的整数将被缓存

Java中int和Integer使用==比较将Integer拆箱成int后比较大小(jdk版本不小于1.5) Integer和Integer之间==比较,是对象之间的比较,看两个引用是否指向同一...
  • shihui512
  • shihui512
  • 2016年03月23日 10:17
  • 2159

踩坑笔记之Integer数值比较

很多东西,表面上看起来挺简单,实际上别有洞天,一不小心就是一个坑。记录一下昨天遇到的Integer数值比较所遇到的“奇葩BUG”。 1.问题场景 先看如下一段代码if(activity.getTot...
  • song19890528
  • song19890528
  • 2015年11月06日 09:24
  • 593

int和Integer有什么区别?

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper c...
  • zero__007
  • zero__007
  • 2016年04月25日 21:10
  • 4993

Java中Integer类的详解与用途

java.lang 类 Integer java.lang.Object   java.lang.Number       java.lang.Integer 所有已实现的接口: Se...
  • litong09282039
  • litong09282039
  • 2015年06月01日 13:47
  • 2555
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1103. Integer Factorization (30)
举报原因:
原因补充:

(最多只允许输入30个字)