题意:给若干个阻值为1的电阻,要得到阻值为a/b的电阻最少需要多少个。

思路:令a=mb+n,则a/b=m+n/b=m+1/(b/n),令f(a,b)表示得到a/b的电阻的答案,由f(a,b)=f(b,a),有:

f(a,b)=a/b + f(a%b,b)=a/b+f(b,a%b)

(1)由于将所有的电阻之间的关系改变一下,串联变成并联,并联变成串联,阻值变成之前的倒数,所以f(a,b)=f(b,a)成立。

(2)现在再证一下:串联变成并联,并联变成串联,阻值变成之前的倒数。考虑任一个电路,一定可以看成两个电路的并联或者两个电路的串联(题目保证了),先假设子问题成立,考虑原来的电路A和电路B,如果A和B串联,则R0=RA+RB,变成并联后R=1/(1/(1/RA)+1/(1/RB))=1/(RA+RB)=1/R0,如果A和B并联,则R=RA*RB/(RA+RB),变成串联后R=1/RA+1/RB=(RA+RB)/(RA*RB)=1/R0,由数学归纳法,所以结论成立

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define X first
#define Y second
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define copy(a, b) memcpy(a, b, sizeof(a)) typedef long long ll;
typedef pair<int, int> pii;
typedef unsigned long long ull; //#ifndef ONLINE_JUDGE
void RI(vector<int>&a,int n){a.resize(n);for(int i=;i<n;i++)scanf("%d",&a[i]);}
void RI(){}void RI(int&X){scanf("%d",&X);}template<typename...R>
void RI(int&f,R&...r){RI(f);RI(r...);}void RI(int*p,int*q){int d=p<q?:-;
while(p!=q){scanf("%d",p);p+=d;}}void print(){cout<<endl;}template<typename T>
void print(const T t){cout<<t<<endl;}template<typename F,typename...R>
void print(const F f,const R...r){cout<<f<<", ";print(r...);}template<typename T>
void print(T*p, T*q){int d=p<q?:-;while(p!=q){cout<<*p<<", ";p+=d;}cout<<endl;}
//#endif
template<typename T>bool umax(T&a, const T&b){return b<=a?false:(a=b,true);}
template<typename T>bool umin(T&a, const T&b){return b>=a?false:(a=b,true);}
template<typename T>
void V2A(T a[],const vector<T>&b){for(int i=;i<b.size();i++)a[i]=b[i];}
template<typename T>
void A2V(vector<T>&a,const T b[]){for(int i=;i<a.size();i++)a[i]=b[i];} const double PI = acos(-1.0);
const int INF = 1e9 + ;
const double EPS = 1e-8; /* -------------------------------------------------------------------------------- */ ll f(ll a, ll b) {
return b? a / b + f(b, a % b) : ;
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // ONLINE_JUDGE
ll a, b;
while (cin >> a >> b) {
cout << f(a, b) << endl;
}
return ;
}

最新文章

  1. Rafy 框架 - 幽灵插件(假删除)
  2. HDU 2082 找单词 (多重背包)
  3. 图论 SRM 674 Div1 VampireTree 250
  4. 如何引用XML文件生成C#类
  5. 详细剖析电脑hosts文件的作用和修改
  6. Windows 服务入门指南
  7. 1. VS2010---简介
  8. Android开发之bindService()通信
  9. python作业day4计算器
  10. Serializable Clonable
  11. iOS 图片拉伸
  12. Flask 学习 十六 部署
  13. 一位月薪1.2w的北漂程序员真实生活!
  14. PATH环境变量
  15. Redis学习之SDS源码分析
  16. 破解网页右键被禁止js
  17. Query the tables and index which will caus rebuild index fail
  18. Linux Platform驱动模型(三) _platform+cdev
  19. 国内代码托管平台(Git)
  20. 使用springmvc从页面中获取数据,然后根据获得的参数信息进行修改,如果修改的数据中含有不是基本数据类型的参数。比如传的参数中有Date类型的数据时,需要我们进行参数类型转换。

热门文章

  1. 原创hadoop2.6.4 namenode HA+Federation集群高可用部署
  2. Chrome插件安利!可以一键导出微信读书笔记|支持Markdown等三种格式
  3. Joomla 3.4.6 Remote Code Execution漏洞复现
  4. WEBMIN(CVE-2019-15107) 学习
  5. STL入门大全(待编辑)
  6. JDBC教程——检视阅读
  7. socket小计
  8. java传参问题
  9. PHP实现MySQL并发查询
  10. SpringCloud之整合Feign