博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1416
阅读量:7238 次
发布时间:2019-06-29

本文共 2229 字,大约阅读时间需要 7 分钟。

看这个解感觉有好多地方写的很妙

膜啊,大神,学习了

哦,我做错了,方法还繁

 

     使用矩阵表示所有可能值

  假设要剪碎的是  12346

  矩阵num为:

  1  12  123  1234  12346

  2  23  234  2346  0

  3  34  346  0    0

  4  46  0    0      0

  6  0    0      0    0

 

原博客:http://blog.csdn.net/non_cease/article/details/7326850

#include 
#include
#include
#include
using namespace std;#define M 6int d[M], tar, val, len, num[M][M];bool flag;struct PathCell { int l, r; } pre[M][M], ans; //记录路径void convert(char tmp[]){ int i; for (i = 0; tmp[i] != '\0'; i++) d[i] = tmp[i] - '0'; len = i;}void preprocess()//预处理,求出剪断后的所有可能整数{ int i, j, k; for (i = 0; i < len; i++) { for (j = i; j < len; j++) { k = i; while (k <= j) { num[i][j] = num[i][j] * 10 + d[k]; k++; } } }}bool dfs(int id, int now, int last){ if (id >= len) { if (now > val && now <= tar) { val = now; ans.l = last; ans.r = id - 1; //当获得最优值时,ans记录最后的情况,用于输出路径,flag更新为false,表明目前只有一种方式取得最优值 flag = false; return true; //返回true,表明找到最优值 } else if (now == val) flag = true;//flag为true表示当前最优值可通过多种方式获得 return false; } bool mark = false; for (int i = 1; i <= len - id; i++) { int cur = id+i-1; if (dfs (id + i, now + num[id][cur], id)) {
//返回值为true时(即找到当前最优指时)记录路径 pre[id][cur].l = last; pre[id][cur].r = id - 1; mark = true; } } return mark;}void output(int l, int r) //递归输出路径{ if (l < 0 && r < 0) return; output(pre[l][r].l, pre[l][r].r); printf ("%d ", num[l][r]);}int main(){ char tmp[10]; while (scanf ("%d %s", &tar, tmp)) { if (!tar && tmp[0] == '0') break; memset(num, 0, sizeof (num)); convert(tmp); preprocess(); flag = false; val = -1; dfs(0, 0, -1); if (flag) { printf ("rejected\n"); continue; } if (val == -1) printf ("error\n"); else { printf ("%d ", val); output (ans.l, ans.r); printf ("\n"); } } return 0;}

 

转载于:https://www.cnblogs.com/HackHer/p/6135740.html

你可能感兴趣的文章
java 多线程 继承Thread和实现Runnable的区别
查看>>
http://www.maticsoft.com/help/maticstudy.htm
查看>>
【树形DP】【P1351】 【NOIP2014D1T2】联合权值
查看>>
iOS 与 惯性滚动
查看>>
vue keep-alive
查看>>
Linux7 重置root密码
查看>>
paper 25 :SVM支持向量机是什么意思?
查看>>
shell 调试 `<<' is not matched
查看>>
利用findbug插件 用于Java代码的查找bug
查看>>
图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb
查看>>
windows程序内部运行机制
查看>>
访问svc 文件,编译器错误消息: CS0016,未能写入输出文件
查看>>
Spring中bean的范围
查看>>
(混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
查看>>
畅通工程 - 并查集的应用
查看>>
OpenCv图像像素操作
查看>>
myeclipse快捷键大全
查看>>
编程之美1.2 | 中国象棋将帅问题
查看>>
Matplotlib学习---用matplotlib画阶梯图(step plot)
查看>>
Linux非ROOT(普通用户)环境安装/启动/运行 MySQL server CentOS7为例
查看>>