锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Genealogical tree. 瀹惰氨鏍? Time Limit: 1 second Memory Limit: 16M Problem 緙栧啓涓涓▼搴忓緇欏畾鐨勪漢鍛橈紝鍐沖畾涓涓厛鍚庨『搴忥紝 榪欎釜欏哄簭蹇呴』閬靛畧鍏堥暱杈堬紝鍚庢櫄杈堢殑鍘熷垯銆? Input 棣栬涓篘錛?1 <= N <= 100 ,N涓烘諱漢鏁般傛牴鎹櫨騫翠紶緇燂紝緇欎漢鍛樼敤鑷劧鏁扮紪鍙蜂負(fù)1鑷砃銆備互涓嬬殑N琛岋紝絎琁琛屼負(fù)絎琁涓漢鐨勫瓙瀛欏垪琛紝瀛愬瓩鐨勯『搴忔槸浠繪剰鐨勶紝鐢ㄧ┖鏍奸殧寮錛屼笖浠?涓虹粨鏉熴傚瓙瀛欏垪琛ㄥ彲浠ユ槸絀虹殑銆? Output 鍦ㄤ竴琛屽唴杈撳嚭鍙戣█鐨勯『搴忋?濡傛湁澶氫釜欏哄簭婊¤凍鏉′歡錛屽垯杈撳嚭浠諱竴涓傝嚦灝戜細(xì)鏈変竴涓弧瓚崇殑欏哄簭鐨勩? Sample Input Sample Output
*/
#include <iostream>
using namespace std;
/*
娉ㄦ剰鍒板浜巊cd(a,b) = d 鎴戜滑瀵?a, b)鐢ㄦ鍑犻噷寰瘋緱杞浉闄や細(xì)鏈緇堝緱鍒?br />(d, 0)姝ゆ椂瀵逛簬鎶奱 =d, b = 0 甯﹀叆a*x + b*y = d錛屾樉鐒秞 = 1錛寉鍙互涓轟換鎰忓鹼紝
榪欓噷y鍙互涓轟換鎰忓煎氨鎰忓懗鐫瑙d細(xì)鏈夋棤鏁頒釜銆傛垜浠彲浠ョ敤a = d, b = 0鐨勬儏鍐甸嗘帹鍑烘潵
浠諱綍gcd(a, b) = d 婊¤凍a*x + b*y = d鐨勮В銆傚鏋渪0, y0鏄痓*x + (a%b)*y = d 鐨勮В錛?br />閭d箞瀵逛簬a*x + b*y = d鐨勮В鍛紵
b*x0 + (a%b)*y0 = d => b*x0 + (a - [a/b]*b)*y0 = a*y0 + b*(x0 - [a/b]*y0)錛?br />鎵浠*x + b*y = d鐨勮Вx1 = y0錛?nbsp;y1 = x0 - [a/b]*y0; 榪欐牱鎴戜滑鍙互紼嬪簭榪甫浜嗐?br />*/
int extEuclid(int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
int d = extEuclid(b, a % b, x, y);
int iTemp = x;
x = y;
y = iTemp - (a / b)* y;
return d;
}
//瑙e悓浣欐柟紼媋x = b(mod n) (榪斿洖鏈灝忕殑姝f暟x)
int modularLinearEquation(int a, int b, int n)
{
//絳変環(huán)浜庢眰ax + cn = b;
//鍏堟眰a*x1 + c1*n = gcd(a, n)
int x, y, d;
d = extEuclid(a, n, x, y);
if (b % d != 0)
return -1;
x = x * (b / d);
x = (( x % n) + n) % n;
return x;
}
//涓浗鍓╀綑瀹氱悊錛屾帹瀵奸兘鏄暟瀛?/span>
int solModularEquations(int b[], int m[], int k)
{
int iTemp;
int y;
int result;
int M = 1;
for (int i = 0; i < k; i++)
M *= m[i];
result = 0;
for (int i = 0; i < k; i++)
{
iTemp = M / m[i];
y = modularLinearEquation(iTemp, 1, m[i]);
result = (result + b[i] * iTemp * y) % M;
}
return result;
}
int main()
{
int x, y , d;
d = extEuclid(1001, 767, x, y);
cout << x << endl;
cout << y << endl;
cout << d << endl;
cout << "1001 * x + 767 * y = " << (1001 * x + 767 * y) << endl;
cout << modularLinearEquation(3, 2, 100) << endl;
return 0;
}
]]>
緇欏畾涓涓敱n琛屾暟瀛楃粍鎴愮殑鏁板瓧涓夎褰㈠涓嬪浘鎵紺恒?br />璇曡璁′竴涓畻娉曪紝璁$畻鍑轟粠涓夎褰㈢殑欏惰嚦搴曠殑涓鏉¤礬寰勶紝浣胯璺緞緇忚繃鐨勬暟瀛楁誨拰
瀵逛簬緇欏畾鐨勭敱n琛屾暟瀛楃粍鎴愮殑鏁板瓧涓夎褰紝
緙栫▼璁$畻浠庝笁瑙掑艦鐨勯《鑷沖簳鐨勮礬寰勭粡榪囩殑鏁板瓧鍜岀殑鏈澶у?br />
*/
#include <stdio.h>
#include <string.h>
const int MAXN = 100 + 10;
int a[MAXN][MAXN],d[MAXN][MAXN];
int n;
inline int max(int a,int b) { return a > b ? a : b;}
int dfs(int i,int j)
{
if (d[i][j] >= 0) return d[i][j];
return d[i][j] = a[i][j] + (i == n ? 0 : max(dfs(i+1,j),dfs(i+1,j+1)));
}
int main()
{
int i;
int j;
freopen("1.txt","r",stdin);
while (scanf("%d",&n) != EOF)
{
memset(d,-1,sizeof(d));
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= i; ++j)
scanf("%d",&a[i][j]);
}
printf("%d\n",dfs(1,1));
}
return 0;
}
const int MAXN = 100 + 10;
int a[MAXN][MAXN],d[MAXN][MAXN];
int n;
inline int max(int a, int b) { return a > b ? a : b; }
int main()
{
int i,j;
freopen("1.txt","r",stdin);
while (scanf("%d",&n) != EOF)
{
for (i = 1; i <= n; ++i)
for (j = 1; j <= i; ++j)
scanf("%d",&a[i][j]);
for (j = 1; j <= n; j++) d[n][j] = a[n][j];
for (i = n - 1; i >= 1; i--)
for (j = 1; j <= i; j++)
d[i][j] = a[i][j] + max(d[i+1][j],d[i+1][j+1]);
printf("%d\n",d[1][1]);
}
return 0;
}
]]>
2 杈撳叆姝f暣鏁発,鎵懼埌鎵鏈夌殑姝f暣鏁皒>=y,浣垮緱1/k = 1/x + 1/y.
3 鏍蜂緥杈撳叆:
4 2
5 12
6 鏍蜂緥杈撳嚭
7 2
8 1/2=1/6+1/3
9 1/2=1/4+1/4
10
11 8
12 1/12 = 1/156 + 1/13
13 1/12 = 1/84 + 1/14
14 1/12 = 1/60 + 1/15
15 1/12 = 1/48 + 1/16
16 1/12 = 1/36 + 1/18
17 1/12 = 1/30 + 1/20
18 1/12 = 1/28 + 1/21
19 1/12 = 1/24 + 1/24
20 */
21 #include <stdio.h>
22
23 const int MAXN = 1000 + 10;
24 int x[MAXN],y[MAXN];
25
26 int main()
27 {
28 int k;
29 int ans;
30 int i;
31 while (scanf("%d",&k) != EOF)
32 {
33 ans = 0;
34 for (i = k + 1; i <= 2*k; ++i)
35 {
36 if ((k * i) % (i-k) == 0) { x[ans] = (k*i)/(i-k),y[ans++] = i; }
37 }
38 printf("%d\n",ans);
39 for (i = 0; i < ans; ++i)
40 {
41 printf("1/%d = 1/%d + 1/%d\n",k,x[i],y[i]);
42 }
43 }
44 return 0;
45 }
46
]]>
Background 澶ф剰錛氱伀鏄熶漢鐨勭鏃忓叧緋繪瘮杈冩販涔便傚畻鏃忕鐞嗗鍛樹細(xì)榪涜寮浼?xì)鍙懎a絳夋椿鍔ㄦ椂錛屽張鎯抽伒瀹堝厛闀胯緢錛屽悗鏅氳緢鐨勯『搴忋?浜庢槸鏈変笅闈㈢殑闂錛? 5 0 4 5 1 0 1 0 5 3 0 3 0
2 4 5 3 1
* 900803 09:04:18 21 Aug 2005 RoBa 1022 C++ Accepted 0.001 190 KB
* 鎷撴墤鎺掑簭
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int MAX = 101;
int map[MAX][MAX],inde[MAX],taken[MAX];
int main()
{
int i,n,tmp,j;
while (scanf("%d",&n)!=EOF)
{
memset(map,0,sizeof(map));
memset(inde,0,sizeof(inde));
for (i = 1 ; i <= n ; i++)
while (scanf("%d",&tmp),tmp)
{
map[i][tmp] = 1;
++inde[tmp];
}
while (1)
{
for (i = 1 ; i <= n ; i++)
if (inde[i] == 0 && taken[i] == 0) break;
if (i > n) break;
for (j = 1 ; j <= n ; j++)
if (map[i][j])
{
map[i][j] = 0;
--inde[j];
}
taken[i] = 1;
printf("%d ",i);
}
printf("\n");
}
return 0;
}
]]>