其实这题我已经写过两遍了,但都是在看过算法笔记的情况下写的。方法不难,只要能想出来。

找到一个项数为k,每项为p次幂,和为n,并且在有多个结果的情况下要求数字之和最大的一个多项式。如果数字之和相等。还要要求下标最大。

因为曾经看过答案,很多处理方法都有印象。这题的思维的确巧妙,如果能好好理解,就能掌握隐式图dfs搜索的内核。

对于每个dfs递归搜索函数,有两个后继:①选择这个数。 ②不选这个数。

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 1010
#define MAX 0x06FFFFFF
#define V vector<int> using namespace std; int n,k,p;
int proc[LEN];
int sz=; int dpow(int a,int n){
int ans=;
while(n--){
ans*=a;
}
return ans;
} void init(){
while(){
proc[sz]=dpow(sz,p);
if(proc[sz]>) break;
sz++;
}
} vector<int> ans;
vector<int> path;
int best_num_sum=-; void dfs(int num,int len,int sum,int num_sum){
if(sum>n || len>k) return;
if(sum==n && len==k){
if(num_sum>best_num_sum){
best_num_sum=num_sum;
ans=path;
}
return;
}
//choose
path.push_back(num);
dfs(num,len+,sum+proc[num],num_sum+num);
path.pop_back();
//don't choose, continue
if(num>){
dfs(num-,len,sum,num_sum);
}
} int main(){
// freopen("I:\\pat\\图的遍历\\1103.txt","r",stdin);
int a,b,i,j;
I("%d%d%d",&n,&k,&p);
init();
dfs(sz,,,);
if(ans.size()){
O("%d =",n);
FF(i,ans.size()){
O(" %d^%d",ans[i],p);
if(i!=ans.size()-)
O(" +");
}
}else{
puts("Impossible");
}
return ;
}

最新文章

  1. Atitit.木马病毒强制强行关闭360&#160;360tray.exe的方法
  2. 【转】AngularJS 取消对 HTML 片段的转义
  3. POJ 2352Stars 树状数组
  4. 使用sql创建表并添加注释
  5. nginx日志配置
  6. HDU 3829 Cat VS Dog
  7. Bitmap和Drawable浅谈
  8. 利用百度API(js),怎样通过地址获取经纬度
  9. 关于 systemctl --user status 报错的问题
  10. JS性能优化 之 事件委托
  11. OpenCV学习代码记录——人脸检测
  12. 20155202张旭 Exp5 MSF基础应用
  13. ISD9160学习笔记03_ISD9160音频解码代码分析
  14. ShowMsg函数
  15. Linux 需要掌握的一些命令
  16. notepad++ 正则学习记录
  17. FreeRTOS 任务优先级分配方案
  18. [Maven实战-许晓斌]-[第二章]-2.2基于UNIX系统安装maven
  19. Linux_总结_02_最小化安装后需要安装和更新的命令
  20. Lights inside 3D Grid LightOJ - 1284 (概率dp + 推导)

热门文章

  1. commitizen规范代码提交
  2. Windbg断点调试.net程序
  3. GT性能测试Android版使用说明
  4. 【spring】【spring boot】获取系统根路径,根目录,用于存储临时生成的文件在服务器上
  5. LinQ in 写法
  6. 基于YOLO3对图像加框的函数draw_image()
  7. java 手写 jvm高性能缓存
  8. Django的视图系统:View
  9. 移动4G插卡注网
  10. 2 Linux磁盘管理