CDOJ--1668

原题链接:http://acm.uestc.edu.cn/problem.php?pid=1668

       由于题目意思指的是将分数拆分成不同的单位分数之和,所以就不用考虑将2/3拆成1/3+1/3这种情况了;又由于好的拆分要求项数即len
要少,最小的项要大,故可以采用迭代加深搜索,按项数不断增大的顺序进行搜索;对每一种len,要用一个数组将其的所有情况记录下来,
但这样太耗空间了,因此将情况保存在ans数组里,然后对ans不断进行更新。具体实现时,要设两个标志flag,flag1,flag用来判断是不是
第一次搜索len长的拆分,flag1用来判断是否需要对ans进行更新。还有就是每次搜索的起点要弄好,后面的要比前面的大,要将a/b-1/z作
为新的搜索分数,其中z为当前搜到的符合要求的项。然后就可以比较方便地实现了。

 1 #include<stdio.h>
 2 
 3 #include<string.h>
 4 
 5 typedef long long ll;
 6 ll a,b,pre[1005],ans[1005];
 7 int flag;
 8 ll max(ll x,ll y)
 9 {
10      if(x>y)return x;
11      return y;
12 }
13 ll gcd(ll small,ll big)
14 {
15      ll temp;
16      if(big<small)
17     {
18           temp=big;big=small;small=temp;
19      }
20      if(big%small==0)return small;
21      return gcd(big%small,small);
22 }
23 void ids(ll x,ll y,int len,int cur)
24 {
25      ll i,j,k;
26      if(cur==len)
27     {
28          if(x==1)
29          {
30                pre[len]=y;
31                if(!flag)
32                {
33                    for(i=1;i<=len;i++)
34                    ans[i]=pre[i];
35                }
36                else
37                {
38                      int temp,flag1=0;
39                      for(temp=len;temp>0;temp--)
40                      {
41                           if(pre[temp]>ans[temp])break;
42                           if(pre[temp]<ans[temp])flag1=1;
43                           if(flag1)break;
44                       }
45                       if(flag1)
46                       {
47                             for(i=1;i<=len;i++)
48                              ans[i]=pre[i];
49                        }
50                 }
51                 flag=1;
52          }
53          return ;
54      }
55      j=y/x;
56      if(j<2)j=2;
57      j=max(pre[cur-1]+1,j);
58      while(x*j-y<=0)j++;
59      while(1)
60      {
61           ll z=x*j-y;
62           ll m=y*j;
63           k=gcd(z,m);
64           z/=k;m/=k;
65           if(len-cur<(z*j)/m)return ;
66           if(z*j>=(len-cur)*m)return ;
67           pre[cur]=j;
68           ids(z,m,len,cur+1);
69           j++;
70      }
71 }
72 int main()
73 {
74         int i,j,T;
75         ll k;
76         scanf("%d",&T);
77         while (T--)
78        {
79             scanf("%lld%lld",&a,&b);
80             k=gcd(a,b);
81             a/=k;b/=k;
82             pre[0]=1;
83             for(i=1;i<=1000;i++)
84             {
85                   flag=0;
86                   ids(a,b,i,1);
87                   if(flag)break;
88               }
89               for(j=1;j<=i;j++)
90               printf("%lld ",ans[j]);
91               printf("\n");
92          }
93         return 0;
94 }

 

转载于:https://www.cnblogs.com/i-love-acm/archive/2013/05/25/3099222.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# xaml语言教程,c#学习之30分钟学会XAML

1.狂妄的WPF相对传统的Windows图形编程&#xff0c;需要做很多复杂的工作&#xff0c;引用许多不同的API。例如&#xff1a;WinForm(带控件表单)、GDI(2D图形)、DirectXAPI(3D图形)以及流媒体和流文档等&#xff0c;都需要不同的API来构建应用程序。WPF就是看着上面的操作复杂和…

(Android实战)AsyncTask和Handler两种异步方式实现原理和优缺点比较

1 AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l 简单,快捷 l 过程可控 使用的缺点…

Java Collections list()方法与示例

集合类list()方法 (Collections Class list() method) list() method is available in java.util package. list()方法在java.util包中可用。 list() method is used to return an array list that contains all the elements returned by the given Enumeration and the way o…

第八章 异常

第八章 异常 异常事件可能是错误&#xff08;如试图除以零&#xff09;&#xff0c;也可能是通常不会发生的事情。 Python提供功能强大的替代解决方案——异常处理机制。 异常是什么&#xff1f; Python使用异常对象来表示异常状态&#xff0c;并在遇到错误时引发异常。异常…

hdu 1564 Play a game

对于本题&#xff0c;若要当前的 player 赢&#xff0c;剩下所走的步数必须是奇数步。所以对于每步的 player 所放弃的选择的步数为偶数步。因此&#xff0c;对于整个 game 来说&#xff0c;所放弃的步数 m 为偶数步&#xff0c;设所走的步数为 k &#xff0c;则 n*n-1mk&…

【电设控制与图像训练题】【激光打靶】【opencv测试代码以及效果】

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 规则 激光枪自动射击装置(E题) 【本科组】 一、任务 设计一个能够控制激光枪击发、自动报靶及自动瞄准等功能的电子系统。该…

.NET 小结之内存模型

.NET 小结之内存模型 为什么要解.NET 的内存模型 在.NET下的内存管理、垃圾回收其实大部分不需要我们操心&#xff0c;因为大部分.NET已经帮我们做了&#xff0c;通常情况下也不需要考虑这些。但是如果想要了解一些.NET一些稍微“底层”的原理&#xff0c;如&#xff1a;“装箱…

C ++ STL中的set :: upper_bound()函数

C STL set :: upper_bound()函数 (C STL set::upper_bound() function) set::upper_bound() function is a predefined function, it is used to get the upper bound of any element in a set. set :: upper_bound()函数是预定义的函数&#xff0c;用于获取集合中任何元素的上…

c语言if不能判断u8变量值,C语言变量名命规则.doc

C语言变量名命名规则一、程序风格&#xff1a;???????? 1、严格采用阶梯层次组织程序代码&#xff1a;???????? 各层次缩进的分格采用VC的缺省风格&#xff0c;即每层次缩进为4格&#xff0c;括号位于下一行。??? 要求相匹配的大括号在同一列&#xff0c;对…

【电设控制与图像训练题】【激光打靶】【openmv测试代码以及效果】

9.4加入串口通讯,送出靶心坐标、激光坐标、激光所在环数、方位;加入防误判操作 博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 规则坐标系代码总结相关openmv使用文…

MVC3中的视图文件

在MVC3中的视图部分&#xff0c;Razor视图引擎是与以往不同的地方之一&#xff0c;使用Razor的视图文件再也不是以往的ASPX文件了&#xff0c;是cshtml文件&#xff0c;在新建视图的时候也会发现增加多了几类文件 由上到下分别是 MVC 3 Layout Page&#xff1a;与原来Web Form的…

第九章 魔法方法、特性和迭代器

第九章 魔法方法、特性和迭代器 构造函数 构造函数&#xff08;constructor&#xff09;&#xff0c;它其实就是初始化方法&#xff0c;只是命名为__init__。 构造函数不同于普通方法的地方在于&#xff0c;将在对象创建后自动调用它们。 在Python中&#xff0c;创建构造函数…

PHP 代码 加密

PHP 代码 加密 此加密方法支持任意PHP版 代码如下: <?php function RandAbc($length""){//返回随机字符串 $str"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; return str_shuffle($str); } $filenameindex.php; $T_k1RandAbc();//随…

Python字符串| join()方法与示例

join() is an in-built method in Python and it is used to join elements of the list, string etc with the given str separator. join()是Python中的一种内置方法&#xff0c;用于通过给定的str分隔符连接列表&#xff0c;字符串等元素。 Note: Method is called with th…

C语言 链表拼接 PTA,PTA实验 链表拼接 (20point(s))

本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下&#xff1a;struct ListNode {int data;struct ListNode *next;};函数接口定义&#xff1a;struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);其中list1和list2是用户传入的两个按…

读书笔记_Effective_C++_条款十九:设计class犹如设计type

这里初看到”class”和”type”&#xff0c;感觉他们是说的是同一样东西&#xff0c;但仔细读了一下&#xff0c;两者在文中还是有区别的。class侧重于自定义的类&#xff0c;而type侧重于系统预定义的类&#xff08;像int、double、string、vector&#xff09;。设计好的class…

【TensorFlow学习笔记:神经网络优化(6讲)】

目录【1】NN复杂度【2】指数衰减学习率【3】激活函数优秀激活函数所具有的特点常见的激活函数对于初学者的建议【4】损失函数【5】缓解过拟合——正则化【6】参数优化器【1】SGD【2】SGDM(SGD基础上增加了一阶动量)【3】Adagrade(SGD基础上增加了二阶动量)【4】RMSProp(SGD基础…

kotlin 构造函数_Kotlin程序| 主要构造函数示例

kotlin 构造函数主要建设者 (Primary Constructor) A Kotlin class have Primary constructor and one or more Secondary constructor. Kotlin类具有Primary构造函数和一个或多个Secondary构造函数。 In Kotlin, Primary Constructor is the Part of Class Header. 在Kotlin中…

把SQL Server 错误日志导出为EXCEL 并发送到指定的ftp 或者 共享盘

把SQL Server 错误日志导出为EXCEL 并发送到指定的ftp 或者 共享盘 /* 2005版本 和2000 版本 sql server 错误日志结果不同。 下面是 适用于 SQL2000的 其中加入了 自己编写的一个ftp小程序 用来上传 相关日志状况*/IF object_id(tempdb..#error_log) IS NOT NULLD…

c语言软件幻化,python字符串处理

字符串字符串&#xff1a;不可变有序序列&#xff0c;在python可使用 "abc" , """abc""" ,abc 的形式表示&#xff0c;属于一种字面常量&#xff0c;python3中字符均属于Unicode编码。字符串可以被迭代&#xff0c;遍历&#xff0c;切…