锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
渚嬪: φ(8) = 4, 鍥犱負1錛?/span>3錛?/span>5錛?鍧囧拰8浜掕川銆?br>鎬ц川錛?nbsp; 1. 鑻鏄川鏁幫紝φ錛坧錛?/span>= p-1.
2. 鑻鏄川鏁皃鐨刱嬈″箓錛?#966;錛坣錛?/span>= 錛坧-1錛塸^(k-1)
鍥犱負闄や簡p鐨勫嶆暟閮戒笌n浜掕川
3. 嬈ф媺鍑芥暟鏄Н鎬у嚱鏁幫紝鑻錛宯浜掕川錛?#966;錛坢n錛?/span>= φ(m)φ(n)
鏍規嵁榪?鏉℃ц川鎴戜滑灝卞彲浠ラ鍑轟竴涓暣鏁扮殑嬈ф媺鍑芥暟鐨勫叕寮忥紝鍥犱負涓涓暟鎬誨彲浠ヤ竴浜涜川鏁扮殑涔樼Н鐨勫艦寮忋?br> E(k) = (p1-1)(p2-1)…(pi-1)*(p1^(a1-1))(p2^(a2-1))…(pi^(ai-1))
= k*(p1-1)(p2-1)…(pi-1)/(p1*p2*…pi)
= k*(1-1/p1)*(1-1/p2)…(1-1/pk)
鍦ㄧ▼搴忎腑鍒╃敤嬈ф媺鍑芥暟濡備笅鎬ц川錛屽彲浠ュ揩閫熸眰鍑烘鎷夊嚱鏁扮殑鍊?a涓篘鐨勮川鍥犵礌)
鑻?N%a==0 && (N/a)%a==0) 鍒欐湁:E(N)=E(N/a)*a;
鑻?N%a==0 && (N/a)%a!=0) 鍒欐湁:E(N)=E(N/a)*(a-1);
浠ヤ笅鏄?縐嶆眰嬈ф媺鍑芥暟鐨勭畻娉?br>
2 {
3 __int64 i,j;
4 e[1] = 1;
5 for(i=2;i<=N;i++)
6 if(!e[i])
7 {
8 for(j=i; j<=N; j+=i)
9 {
10 if (!e[j])
11 e[j] = j;
12 e[j] = e[j] / i * (i-1);
13 }
14 }
15 }
鍒╃敤绱犳暟絳涢夛細
{
__int64 i, j;
p[0] = 1; //璁板綍绱犳暟涓暟
p[1] = 2;
for (i=3; i<N; i+=2)
{
if (hash[i])
continue;
p[++p[0]] = i;
for (j=i*i; j<N; j+=i)
hash[j] = true;
} //絳涚礌鏁?/span>
e[1] = 1;
for (i=1; i<=p[0]; i++)
e[p[i]] = p[i] - 1; //鍒濆鍖栫礌鏁扮殑phi
for (i=2; i<N; i++)
{
if(!e[i])
{
for (j=1; j<=p[0]; j++)
if (i % p[j]==0)
{
if (i / p[j] % p[j])
e[i] = e[i / p[j]] * e[p[j]];
else
e[i] = e[i / p[j] ]* p[j];
break;
} // 鍒╃敤涓婅堪鎬ц川姹傝В
}
}
return ;
}
鏄庢樉絎竴縐嶇殑緙栫▼澶嶆潅搴﹁浣庡緢澶?br>鎵浠ワ紝涓鑸儏鍐典笅錛圢涓嶆槸寰堝ぇ錛夛紝閲囩敤絎竴縐嶅嵆鍙紱
璐村湪榪欓噷渚涗互鍚庡涔?img border=0 src="http://m.shnenglu.com/Emoticons/QQ/13.gif" width=20 height=20>
]]>
璐ч儙闂(Traveling Salesman Problem錛岀畝縐?#8220;TSP”)涔熷彨璐ч儙鎷呴棶棰橈紝涓浗閭礬闂錛屾梾琛屽晢闂絳?鏄綆楁満綆楁硶鐞嗚鍘嗗彶涓婄殑緇忓吀闂銆傚湪榪囧幓鍑犲崄騫翠腑錛屽畠鎴愪負璁稿閲嶈綆楁硶鎬濇兂鐨勬祴璇曞鉤鍙幫紝鍚屾椂涔熶績浣夸竴浜涙柊鐨勭悊璁洪鍩熺殑浜х敓錛屾瘮濡傚闈綋鐞嗚鍜屽鏉傛х悊璁恒?璐ч儙闂錛氱粰瀹歯涓粨鐐瑰拰浠繪剰涓瀵圭粨鐐箋i錛宩}涔嬮棿鐨勮窛紱諱負dist(i錛宩)錛岃姹傛壘鍑轟竴鏉¢棴鍚堢殑鍥炶礬錛岃鍥炶礬緇忚繃姣忎釜緇撶偣涓嬈′笖浠呬竴嬈★紝騫朵笖璇ュ洖璺殑璐圭敤鏈灝忥紝榪欓噷鐨勮垂鐢ㄦ槸鎸囨瘡孌佃礬寰勭殑璺濈鍜屻?璐ч儙闂姹傝В鍏剁簿紜В鏄疦P闅劇殑錛屽茍涓旀眰瑙d換鎰忓父鏁板洜瀛愯繎浠ュ害鐨勮В涔熸槸NP闅劇殑銆傝嫢灝嗛棶棰橀檺瀹氬湪嬈ф皬騫抽潰涓婏紝灝辨垚涓烘姘忓鉤闈笂鐨勮揣閮庨棶棰?涔熷彨嬈у嚑閲屽痙鏃呰鍟嗛棶棰?Eculid Traveling Salesman Problem)銆備絾鏄紝鍗充嬌鏄姘忓鉤闈笂鐨勮揣閮庨棶棰樹篃鏄疦P闅劇殑銆傚洜姝ら氬父鐢ㄦ潵瑙e喅TSP闂鐨勮В娉曢兘鏄繎浼肩畻娉曘傚叾涓涓涓鍑犻噷寰鋒梾琛屽晢闂鐨勫欏瑰紡榪戜技綆楁硶鏄疉rora鍦?996騫翠嬌鐢ㄩ殢鏈哄鉤闈㈠垎鍓插拰鍔ㄦ佽鍒掓柟娉曠粰鍑虹殑銆?br>
J.L. Bentley 寤鴻閫氳繃鍙冭檻鍙岃皟鏃呯▼(bitonic tour)鏉ョ畝鍖栭棶棰?榪欑鏃呯▼鍗充負浠庢渶宸︾偣寮濮嬶紝涓ユ牸鍦頒粠宸﹀埌鍙崇洿鑷蟲渶鍙崇偣錛岀劧鍚庝弗鏍煎湴浠庡彸鍒板乏鐩磋嚦鍑哄彂鐐廣備簨瀹炰笂錛屽瓨鍦ㄧ‘瀹氱殑鏈浼樺弻璋冭礬綰跨殑O(n*n)鏃墮棿鐨勭畻娉曘?br>

#include<iostream>
using namespace std;
#define N 1100000
int m,n,hp,ati,def;
struct node
{
int ati;
int def;
int hp;
int lv;
int exp;
}q[N],tt;
struct man
{
int ati;
int def;
int hp;
int exp;
}man[21];
int max(int a,int b)

{
return a>b?a:b;
}
int war(int j,int i)

{
int time;
time=man[i].hp/max(1,q[j].ati-man[i].def);
if(man[i].hp%max(1,q[j].ati-man[i].def)==0)
time--;
if(time>=0)
return time;
return -1;
}

void dp()

{
int i,j,time,add,temp,next;
for(j=0;j<m;j++)
{
if(q[j].hp<=0)
continue;
for(i=0;i<n;i++)
{
temp=j>>i;
if(temp&1)
continue;
else
next=j+(1<<i);
if((time=war(j,i))==-1)
continue;//鎴樻枟澶辮觸錛宑ontinue
tt=q[j];
tt.hp-=time*max(1,man[i].ati-tt.def);
tt.exp+=man[i].exp;
if(tt.exp>=100)
{
add=tt.exp/100;
tt.exp%=100;
tt.ati+=add*ati;
tt.def+=add*def;
tt.hp+=add*hp;
tt.lv+=add;
}
if(q[next].hp==0||tt.hp>q[next].hp||(q[next].hp==tt.hp&&(tt.lv*100+tt.exp)>(q[next].lv*100+q[next].exp)))
{
q[next]=tt;
}
}
q[j].hp=0;
}
}
int main()

{
int i;
char name[22];
while(scanf("%d%d%d%d%d%d",&q[0].ati,&q[0].def,&q[0].hp,&ati,&def,&hp)>0)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%d%d%d%d",name,&man[i].ati,&man[i].def,&man[i].hp,&man[i].exp);
m=(1<<n)-1;
q[0].lv=1;
q[0].exp=0;
for(i=1;i<=m;i++)
{
q[i].hp=0;
}
dp();
if(q[m].hp>0)
printf("%d\n",q[m].hp);
else
printf("Poor LvBu,his period was gone.\n");
}
return 0;
}