天平,紫书P157UVa839

来源:互联网 发布:淘宝 安卓 旧版 编辑:程序博客网 时间:2024/05/12 23:11

这是我最喜欢的题目之一。
树状天平整体平衡的一个很重要前提就是所有的子天平必须平衡。每一个子天平的左右砝码重量和都是其父天平一侧的重量。因此一个递归模型逐渐浮出。

// UVa839 Not so Mobile// Rujia Liu#include<iostream>using namespace std;bool solve(int& W) {  int W1, D1, W2, D2;  bool b1 = true, b2 = true;  cin >> W1 >> D1 >> W2 >> D2;  if(!W1) b1 = solve(W1);  if(!W2) b2 = solve(W2);  W = W1 + W2;  return b1 && b2 && (W1 * D1 == W2 * D2);}int main() {  int T, W;  cin >> T;  while(T--) {    if(solve(W)) cout << "YES\n"; else cout << "NO\n";    if(T) cout << "\n";  }  return 0;}

本程序最关键的地方就是solve()函数中传的是引用,这样直接与子天平建立了数据联系(子天平可以修改w的值),使得在计算w=w1+w2的时候,w1w2可以直接根据子天平的情况得出结果。这么精简的解法,一般人实在想不出。

原创粉丝点击