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.pswp.cn/news/378322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378322.shtml
英文地址,請注明出處:http://en.pswp.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;切…