锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鐒跺悗灝辨槸鏈夊叧鐭╁艦鐨勫姩鎬佽鍒掋傚涓嬶細 榪樻湁鍖洪棿綾葷殑錛?/p> 鐒跺悗鏈変笁閬撴祴璇曢錛?/p> 涓嬪崍寮濮嬪皢鏍戝艦鐨勫姩鎬佽鍒掋?/p> 娌℃湁鍐欑殑棰樼洰浠ュ悗浼氶愭瀹屾垚銆?/p> 涓媯典簩鍙夋爲鍙互鎸夌収濡備笅瑙勫垯琛ㄧず鎴愪竴涓敱0銆?銆? 緇勬垚鐨勫瓧絎﹀簭鍒楋紝鎴戜滑縐頒箣涓衡滀簩鍙夋爲搴忓垪S鈥濓細 2琛ㄧず璇ユ爲鏈変袱涓瓙鑺傜偣錛?鍜屽垎鍒〃紺哄叾涓や釜瀛愭爲鐨勪簩鍙夋爲搴忓垪 1琛ㄧず璇ユ爲鏈変竴涓瓙鑺傜偣錛?涓哄叾瀛愭爲鐨勪簩鍙夋爲搴忓垪 0琛ㄧず璇ユ爲娌℃湁瀛愯妭鐐?/p> 浣犵殑浠誨姟鏄瀵逛竴媯典簩鍙夋爲鐨勮妭鐐硅繘琛屾煋鑹層傛瘡涓妭鐐瑰彲浠ヨ鏌撴垚綰㈣壊銆佺豢鑹叉垨钃濊壊銆傚茍涓旓紝涓涓妭鐐逛笌鍏跺瓙鑺傜偣鐨勯鑹插繀欏諱笉鍚岋紝濡傛灉璇ヨ妭鐐規湁涓や釜瀛愯妭鐐癸紝閭d箞榪欎袱涓瓙鑺傜偣鐨勯鑹蹭篃蹇呴』涓嶇浉鍚屻傜粰瀹氫竴媯典簩鍙夋爲鐨勪簩鍙夋爲搴忓垪錛岃姹傚嚭榪欐5鏍戜腑鏈澶氬拰鏈灝戞湁澶氬皯涓偣鑳藉琚煋鎴愮豢鑹層?/p> 銆愯緭鍏ユ枃浠躲?/p> 杈撳叆鏂囦歡鍚嶏細TRO.IN 杈撳叆鏂囦歡浠呮湁涓琛岋紝涓嶈秴榪?0000 涓瓧絎︼紝琛ㄧず涓涓簩鍙夋爲搴忓垪銆?/p> 銆愯緭鍑烘枃浠躲?/p> 杈撳嚭鏂囦歡鍚嶏細TRO.OUT 杈撳嚭鏂囦歡涔熷彧鏈変竴琛岋紝鍖呭惈涓や釜鏁幫紝渚濇琛ㄧず鏈澶氬拰鏈灝戞湁澶氬皯涓偣鑳藉琚?/p> 鏌撴垚緇胯壊銆?/p> 銆愭牱渚嬭緭鍏ャ?/p> 1122002010 銆愭牱渚嬭緭鍑恒?/p> 5 2 銆愬垎鏋愩?/p> 鎷挎渶澶ф潵璇淬?/p> 姣忎釜鑺傜偣鐨勭姸鎬佸彧鏈変笁縐嶉鑹詫紝鎴戜滑鐢╢[i][0],f[i][1]鍒嗗埆浠h〃絎琲涓偣鏌撶豢鑹插拰涓嶇劧緇胯壊鐨勬渶澶氱殑鐐規暟銆傚洜涓哄鏋滀竴涓偣涓嶆煋緇胯壊錛岄偅涔堜粬鏌撳彟涓ょ棰滆壊鏄瓑浠風殑銆傚姝ゆ垜浠氨寰楀埌浜嗗涓嬬殑鍔ㄨ鏂圭▼錛?/p> 鏈鍚庤緭鍑哄氨鏄痬ax(f[0][1],f[0][0])銆?/p> 鏈灝忕殑鍜屾渶澶х殑鐩稿悓銆?/p> 鍥犱負鏄竴媯典簩鍙夋爲鐨勫墠搴忛亶鍘嗭紝閭d箞瀵逛簬涓涓湁瀛愯妭鐐圭殑鐐規潵璇達紝宸﹀効瀛愬氨鏄痠+1銆傛垜浠紩榪涗竴涓猯ink[i]錛岃〃紺轟互i涓烘牴鐨勫瓙鏍戞渶鍚庝竴涓偣鐨勬爣鍙鳳紝閭d箞r[i]=link[l[i]]+1銆?/p> 瀵逛簬link[l]錛屾垜浠姝ょ‘瀹氾細 鐒跺悗灝辨槸瀹炵幇浜嗐傚洜涓鴻嚜宸卞紕寰楄繕鏄笉鏄緢鐔燂紝鎵撲簡涓よ妭璇俱?/p> 娉ㄦ剰鍒濆鍖杝[i][j]鐨勬椂鍊欒鍔犱笂100000鑰屼笉鏄?0錛侊紒錛佹垜鍌誨弶瀛愪簡= = 瀵繪壘涓涓敱n涓暣鏁扮粍鎴愮殑鏁板垪錛屽叾涓換鎰忚繛緇璸涓暣鏁頒箣鍜屼負姝o紝浠繪剰榪炵畫q涓暣鏁頒箣鍜屼負璐熴傝嫢涓嶅瓨鍦ㄨ繖鏍風殑鏁存暟鏁板垪錛屽垯杈撳嚭NO錛屽惁鍒欒緭鍑哄叾涓竴涓暟鍒椼?/p> 銆愯緭鍏ャ?/p> 瀵逛簬姣忎釜嫻嬭瘯鐐瑰皢緇欎綘M緇勬暟鎹紝瑕佹眰浣犲浜庢瘡緇勬暟鎹紝鍒ゆ柇鏄惁瀛樺湪榪欐牱鐨勬暣鏁版暟鍒椼?/p> 杈撳叆鐨勭涓琛屾槸涓涓鏁存暟M錛岋紙1<=N<=10000錛?鎺ヤ笅鏉ョ殑M琛屽搴擬緇勬暟鎹紝姣忚鏈変笁涓鏁存暟N銆丳銆丵錛?<=n,p,q<=10^8錛夈?/p> 銆愯緭鍑恒?/p> 杈撳嚭鏁版嵁鍏盢琛岋紝姣忚涓簓es鎴栬卬o錛屽鏋滅I緇勬暟鎹湁瑙o紝鍒欏湪絎琁琛岃緭鍑簓es錛屽惁鍒欒緭鍑簄o 銆愯緭鍏ヨ緭鍑虹ず渚嬨?/p> 銆愯瘎鍒嗘爣鍑嗐?/p> 瀵逛簬姣忎釜嫻嬭瘯鐐癸紝濡傛灉浣犺兘澶熷湪1S鍐呴氳繃姣忕粍鏁版嵁錛屼綘灝嗗緱鍒拌繖涓祴璇曠偣鐨勫垎鏁幫紝鍚﹀垯錛岃繖涓祴璇曠偣浣犲彧鑳藉緱0鍒嗐?/p> 銆愬垎鏋愩?/p> 鍘熼鐩槸瑕佹眰杈撳嚭涓縐嶅彲鑳界殑瑙o紝濡傛灉娌℃湁瑙e氨杈撳嚭-1銆傝繖鏍風殑璇濆氨瑕佺敤鍒板樊鍒嗙害鏉熴?/p> 鐜板湪鐨勮瘽錛屽彧闇瑕佷竴涓叕寮忋傚鏋滄湁瑙o紝搴旀弧瓚籌細n<=q+p-gcd(p,q)-1銆?/p> 涓嬮潰鏄垜鍐欑殑鏌ュ垎綰︽潫銆?/p> 涓嬪崍涓ょ偣澶氱殑鏃跺欐浌鑰佸笀寮濮嬭璇俱?/p> 浠婂ぉ鐨勮紼嬫槸涓や釜鍐呭錛氬叏闈㈠垎鏋愯瘯棰橈紝鍔ㄦ佽鍒掋?/p> 鏇硅佸笀鎷夸粬緇欒嚜宸辯殑瀛︾敓甯冪疆鐨勪換鍔″仛渚嬪瓙錛屽ぇ姒傜殑璇翠簡涓涓嬩粠涓涓鐩殑妯″瀷鍒板畬鏁寸殑棰樼洰鐨勮繃紼嬨傞鍏堟浌鑰佸笀緇欎簡4閬撻鐩紝閮藉彧鏄ぇ姒傜殑鎻忚堪銆傜劧鍚庡皢姣忎釜鏉′歡瀹氫弗璋ㄣ傜‘瀹氳緭鍏ヨ緭鍑虹殑鏍煎紡銆傚垎鏋愬彲浠ョ敤浠涔堢畻娉曪紝姣忕綆楁硶鐨勬椂闂村鏉傚害浠ュ強鍙互閫氳繃鐨勬暟鎹寖鍥淬傛牴鎹畻娉曞畾鍑烘暟鎹紝鍐欏嚭鏍囩▼銆傛浌鑰佸笀璇翠粬浠殑瀛︾敓姣忎釜浜洪氳繃鑷繁鐨勫垎鏋愶紝鍋氬嚭10涓暟鎹紝鐒跺悗澶ф100澶氫釜嫻嬭瘯鐐規潵嫻嬭瘯姣忎釜浜哄啓鐨勭▼搴忋?/p> 浠ヤ笅鏄?閬撻鐩傜浜岄鏈変簺鐡墮錛屼竴浼氬啀鍙戙?/p> 瀵繪壘涓涓敱n涓暣鏁扮粍鎴愮殑鏁板垪錛屽叾涓換鎰忚繛緇璸涓暣鏁頒箣鍜屼負姝o紝浠繪剰榪炵畫q涓暣鏁頒箣鍜屼負璐熴傝嫢涓嶅瓨鍦ㄨ繖鏍風殑鏁存暟鏁板垪錛屽垯杈撳嚭NO錛屽惁鍒欒緭鍑哄叾涓竴涓暟鍒椼?/p> 銆愯緭鍏ャ?/p> 瀵逛簬姣忎釜嫻嬭瘯鐐瑰皢緇欎綘M緇勬暟鎹紝瑕佹眰浣犲浜庢瘡緇勬暟鎹紝鍒ゆ柇鏄惁瀛樺湪榪欐牱鐨勬暣鏁版暟鍒椼?/p> 杈撳叆鐨勭涓琛屾槸涓涓鏁存暟M錛岋紙1<=N<=10000錛?鎺ヤ笅鏉ョ殑M琛屽搴擬緇勬暟鎹紝姣忚鏈変笁涓鏁存暟N銆丳銆丵錛?<=n,p,q<=10^8錛夈?/p> 銆愯緭鍑恒?/p> 杈撳嚭鏁版嵁鍏盢琛岋紝姣忚涓簓es鎴栬卬o錛屽鏋滅I緇勬暟鎹湁瑙o紝鍒欏湪絎琁琛岃緭鍑簓es錛屽惁鍒欒緭鍑簄o 銆愯緭鍏ヨ緭鍑虹ず渚嬨?/p> 銆愯瘎鍒嗘爣鍑嗐?/p> 瀵逛簬姣忎釜嫻嬭瘯鐐癸紝濡傛灉浣犺兘澶熷湪1S鍐呴氳繃姣忕粍鏁版嵁錛屼綘灝嗗緱鍒拌繖涓祴璇曠偣鐨勫垎鏁幫紝鍚﹀垯錛岃繖涓祴璇曠偣浣犲彧鑳藉緱0鍒嗐?/p> 銆愬垎鏋愩?/p> 鍘熼鐩槸瑕佹眰杈撳嚭涓縐嶅彲鑳界殑瑙o紝濡傛灉娌℃湁瑙e氨杈撳嚭-1銆傝繖鏍風殑璇濆氨瑕佺敤鍒板樊鍒嗙害鏉熴?/p> 鐜板湪鐨勮瘽錛屽彧闇瑕佷竴涓叕寮忋傚鏋滄湁瑙o紝搴旀弧瓚籌細n<=q+p+gcd(p,q)-1銆?/p> 鐢佃閲岄潰姝f斁鐫鈥滄娊鐧句竾澶у錛岃耽騫哥鐢熸椿鈥濈殑瀹d紶騫垮憡錛宐ird鐪嬪悗涔熸兂鍘昏瘯璇曟墜姘旓紝褰撶劧錛屼綔涓虹粡嫻庡闄㈢殑楂樻潗鐢燂紝浠栧彲涓嶅睉鍙槸鍗曠函鐨勫幓紕拌繍姘斻傜粡榪囦粬鐨勪竴鐣垎鏋愶紝鍙戠幇錛屽晢瀹跺湪褰╃エ閲岄潰鍋氫簡鎵嬭剼錛屼嬌寰楁瘡涓娊濂栫偣鐨勪腑濂栨鐜囦笉鏄畬鍏ㄤ竴鏍風殑錛岃屼笖闅忕潃鏃墮棿鐨勫彉鍖栬屽彉鍖栵紝涓嶈繃榪欑鍙樺寲鏄湁瑙勫緥鐨勩傚浜庣I涓娊濂栫偣錛屾渶寮濮嬬殑涓姒傜巼鏄櫨涓囧垎涔婸i錛屼互鍚庢瘡鎶戒竴寮犲僵紲ㄥ悗閮借閲嶆柊鎺掗槦錛岃姳璐圭殑鏃墮棿鏄疶鍒嗛挓錛屾瘡鎶戒竴嬈″噺灝戠殑姒傜巼涓篋i銆?/p> 鐢變簬鍙滅殑bird榪樻湁涓澶у爢鐨勪綔涓氭病鍋氾紝浠栧彧鑳芥娊鍑篐涓皬鏃跺幓涔板僵紲ㄣ傜敱浜庢娊濂栧湴鐐歸兘鍦ㄤ竴璺叕鍏辨苯杞︾殑綰胯礬涓婏紝鎵浠ユ曢夯鐑︾殑bird鍐沖畾鎸夎濺绔欓『搴忔娊濂栵紝褰撶劧錛宐ird鍙互浠庝換鎰忎竴绔欏紑濮嬫娊濂栵紝瀵逛簬緇忚繃鐨勬娊濂栫偣鍙互涔板僵紲紝涔熷彲浠ヤ笉涔般傚亣璁句粠絎琁涓娊濂栫偣鍒扮I+1涓娊濂栫偣闇瑕佸仛Ci鍒嗛挓鐨勬苯杞︺?/p> Bird甯屾湜鑳藉湪鏈夐檺鐨凥涓皬鏃跺唴鑾峰緱鏈濂界殑榪愭皵鈥斺斿嵆鎶藉鐨勬鐜囧拰鏈澶с?/p> [杈撳叆] 杈撳叆鏂囦歡鍚嶏細(tickt.in) 絎竴琛屼負涓涓暣鏁皀錛岃〃紺烘娊濂栫偣鐨勪釜鏁幫紝1<=n<=200 絎簩琛屾槸涓や釜鏁存暟H鍜孴錛?<=H<=10錛?<=T<=60銆?/p> 鎺ヤ笅鏉ョ殑n琛岋紝姣忚3涓暣鏁幫紝鍒嗗埆鏄疨i錛孌i錛孋i錛圕n=0錛夈?<=Pi<=10000錛孌i<=Pi錛?<=Ci<=600銆?/p> [杈撳嚭] 杈撳嚭鏂囦歡鍚嶏細(tickt.out) 鏂囦歡浠呮湁涓琛岋紝涓轟竴涓暣鏁幫紝鍗蟲娊濂栨鐜囧拰鐨勬渶澶у箋?/p> 銆愯緭鍏ヨ緭鍑烘牱渚嬨?/p> 2 1 20 200 100 10 300 200 0 銆愭牱渚嬭鏄庛?/p> 棣栧厛錛宐ird浠?鍙峰紑濮嬫娊濂栵紝鑺辮垂20鍒嗛挓錛屽緱鍒版鐜?00錛岀劧鍚庡潗杞﹀埌2鍙鳳紝鑺辮垂10鍒嗛挓錛屽啀鑺?0鍒嗛挓寰楀埌姒傜巼300錛屾鐜囧拰鏄?00錛岃姳璐?0鍒嗛挓銆?/p> 銆愯瘎鍒嗘爣鍑嗐?/p> 瀵逛簬姣忎釜嫻嬭瘯鐐癸紝濡傛灉浣犺兘澶熷湪瑙勫畾鐨勬椂闂村唴閫氳繃姣忕粍鏁版嵁錛屼綘灝嗗緱鍒拌繖涓祴璇曠偣鐨勫垎鏁幫紝鍚﹀垯錛岃繖涓祴璇曠偣浣犲彧鑳藉緱0鍒嗐?/p> 銆愬垎鏋愩?/p> 鐢盋EOI鐨勯挀楸兼敼緙栵紝鍏蜂綋鍙互鐪嬨婄畻娉曡壓鏈笌淇℃伅瀛︾珵璧涖婸13銆?/p>
1.鍔ㄥ綊鍒嗘瀽
2.鏍戠殑紜畾
1: #include <stdio.h>
2: #include <string.h>
3: #include <iostream>
4: #define maxn 10010
5: #define MAXINT 10000000
6: using namespace std;
7:
8: char s[maxn];
9: int f[maxn][2];
10: int link[maxn];
11: int n;
12: int l[maxn],r[maxn];
13:
14: int _find(int x)
15: {
16: if (link[x]) return link[x];
17: if (s[x]=='0') link[x]=x;
18: else
19: if (s[x]=='1') link[x]=_find(x+1);
20: else
21: link[x]=_find(_find(x+1)+1);
22: return link[x];
23: }
24:
25: void find1(int x)
26: {
27: if (f[x][0]) return;
28: if (s[x]=='0')
29: {
30: f[x][0]=1;
31: f[x][1]=0;
32: }
33: else
34: if (s[x]=='1')
35: {
36: find1(l[x]);
37: f[x][0]=f[l[x]][1]+1;
38: f[x][1]=max(f[l[x]][1],f[l[x]][0]);
39: }
40: else
41: {
42: find1(l[x]);
43: find1(r[x]);
44: f[x][0]=f[l[x]][1]+f[r[x]][1]+1;
45: f[x][1]=max(f[l[x]][1]+f[r[x]][0],f[l[x]][0]+f[r[x]][1]);
46: }
47: }
48:
49: void find2(int x)
50: {
51: if (f[x][0]<MAXINT) return;
52: if (s[x]=='0')
53: {
54: f[x][0]=1;
55: f[x][1]=0;
56: }
57: else
58: if (s[x]=='1')
59: {
60: find2(l[x]);
61: f[x][0]=f[l[x]][1]+1;
62: f[x][1]=min(f[l[x]][1],f[l[x]][0]);
63: }
64: else
65: {
66: find2(l[x]);
67: find2(r[x]);
68: f[x][0]=f[l[x]][1]+f[r[x]][1]+1;
69: f[x][1]=min(f[l[x]][1]+f[r[x]][0],f[l[x]][0]+f[r[x]][1]);
70: }
71: }
72:
73: int main()
74: {
75: freopen("tro.in","r",stdin);
76: freopen("tro.out","w",stdout);
77:
78: scanf("%s",s);
79: n=strlen(s);
80: _find(0);
81: for (int i=0;i<n;++i)
82: {
83: l[i]=i+1;
84: r[i]=link[l[i]]+1;
85: }
86: find1(0);
87: printf("%d ",max(f[0][0],f[0][1]));
88: for (int i=0;i<n;++i)
89: f[i][0]=f[i][1]=MAXINT;
90: find2(0);
91: printf("%d\n",min(f[0][0],f[0][1]));
92: return 0;
93: }
94:
1: #include <stdio.h>
2: #define MAXINT 10000000
3: #define maxn 200
4:
5: int f[maxn][maxn][maxn][2];//0 max|||| 1 min
6: int s[maxn][maxn];
7: int a[maxn];
8: int n,m;
9: int maxans,minans=MAXINT;
10:
11: void find(int x,int y,int t)
12: {
13: if (f[x][y][t][0]) return;
14: if (t==1)
15: {
16: f[x][y][1][0]=f[x][y][1][1]=s[x][y];
17: return;
18: }
19: for (int k=x+t-1-1;k<y;++k)
20: {
21: find(x,k,t-1);
22: if (f[x][k][t-1][1]*s[k+1][y]<f[x][y][t][1]) f[x][y][t][1]=f[x][k][t-1][1]*s[k+1][y];
23: if (f[x][k][t-1][0]*s[k+1][y]>f[x][y][t][0]) f[x][y][t][0]=f[x][k][t-1][0]*s[k+1][y];
24: }
25: }
26:
27: int main()
28: {
29: freopen("game.in","r",stdin);
30: freopen("game.out","w",stdout);
31:
32: scanf("%d%d",&n,&m);
33: for (int i=1;i<=n;++i)
34: {
35: scanf("%d",&a[i]);
36: a[i+n]=a[i];
37: }
38: for (int i=1;i<=2*n;++i)
39: for (int j=i;j<=2*n;++j)
40: for (int k=1;k<=m;++k)
41: f[i][j][k][1]=MAXINT;
42: for (int i=1;i<=2*n;++i)
43: for (int j=i;j<=2*n;++j)
44: s[i][j]=(s[i][j-1]+a[j]+100000)%10;
45: for (int i=1;i<=n;++i) find(i,i+n-1,m);
46: for (int i=1;i<=n;++i)
47: {
48: if (f[i][i+n-1][m][0]>maxans) maxans=f[i][i+n-1][m][0];
49: if (f[i][i+n-1][m][1]<minans) minans=f[i][i+n-1][m][1];
50: }
51: printf("%d\n%d\n",minans,maxans);
52: return 0;
53: }
54:
杈撳叆(sequence.in) 杈撳嚭(sequence.out) 2
1 1 9
10 2 4yes
no 1: #include <stdio.h>
2: #include <iostream>
3: using namespace std;
4:
5: int n,m,p,q;
6:
7: int gcd(int a,int b)
8: {
9: if (a<b) swap(a,b);
10: int t;
11: while (b!=0)
12: {
13: t=a;
14: a=b;
15: b=t%a;
16: }
17: return a;
18: }
19:
20: int main()
21: {
22: freopen("sequence.in","r",stdin);
23: freopen("sequence.out","w",stdout);
24:
25: scanf("%d",&m);
26: for (int i=0;i<m;++i)
27: {
28: scanf("%d%d%d",&n,&p,&q);
29: if (n<=p+q+gcd(p,q)-1) printf("YES\n");
30: else printf("NO\n");
31: }
32: return 0;
33: }
34:
1: #include <stdio.h>
2: #define MAXINT 1000000
3: #define maxn 1010
4:
5: struct ss
6: {
7: int x,y,dis;
8: } l[10000];
9:
10: int s[maxn];
11: int a[maxn];
12: int d[maxn];
13: int n,q,p,tot;
14:
15: int main()
16: {
17: scanf("%d%d%d",&n,&p,&q);
18: for (int i=0;i<=n;++i)
19: if (i+p>n) break;
20: else
21: {
22: l[++tot].x=i+p;
23: l[tot].y=i;
24: l[tot].dis=-1;
25: }
26: for (int i=0;i<=n;++i)
27: if (i+q>n) break;
28: else
29: {
30: l[++tot].x=i;
31: l[tot].y=i+q;
32: l[tot].dis=-1;
33: }
34: for (int i=1;i<=n;++i)
35: {
36: for (int j=1;j<=tot;++j)
37: if (d[l[j].y]>d[l[j].x]+l[j].dis)
38: d[l[j].y]=d[l[j].x]+l[j].dis;
39: for (int j=1;j<=tot;++j)
40: if (d[l[j].y]>d[l[j].x]+l[j].dis)
41: {
42: printf("-1\n");
43: return 0;
44: }
45: }
46: for (int i=0;i<=n;++i)
47: s[i]=d[i];
48: for (int i=1;i<=n;++i) printf("%d\n",s[i]-s[i-1]);
49: return 0;
50: }
51:
杈撳叆(sequence.in) 杈撳嚭(sequence.out) 2
1 1 9
10 2 4yes
no 1: #include <stdio.h>
2: #include <iostream>
3: using namespace std;
4:
5: int n,m,p,q;
6:
7: int gcd(int a,int b)
8: {
9: if (a<b) swap(a,b);
10: int t;
11: while (b!=0)
12: {
13: t=a;
14: a=b;
15: b=t%a;
16: }
17: return a;
18: }
19:
20: int main()
21: {
22: freopen("sequence.in","r",stdin);
23: freopen("sequence.out","w",stdout);
24:
25: scanf("%d",&m);
26: for (int i=0;i<m;++i)
27: {
28: scanf("%d%d%d",&n,&p,&q);
29: if (n<=p+q+gcd(p,q)-1) printf("YES\n");
30: else printf("NO\n");
31: }
32: return 0;
33: }
34:
tickt.in tickt.out 500 1: #include <stdio.h>
2: #include <iostream>
3: #define maxn 210
4: using namespace std;
5:
6: int b[maxn][maxn];
7: int p[maxn],d[maxn],c[maxn];
8: int h,t,tot;
9: struct ss
10: {
11: int pi,di;
12: } hp[maxn];
13: int remain,ans,teans,n;
14:
15: void down(int x)
16: {
17: int te=2*x;
18: while (te<=tot)
19: {
20: if ((te+1<=tot)&&(hp[te].pi<hp[te+1].pi)) ++te;
21: if (hp[x].pi>hp[te].pi) break;
22: swap(hp[x],hp[te]);
23: x=te;
24: te=x*2;
25: }
26: }
27:
28: int main()
29: {
30: freopen("ticket.in","r",stdin);
31: freopen("ticket.out","w",stdout);
32:
33: scanf("%d%d%d",&n,&h,&t);
34: h*=60;
35: for (int i=1;i<=n;++i) scanf("%d%d%d",&p[i],&d[i],&c[i]);
36: for (int i=1;i<=n;++i)
37: for (int j=i+1;j<=n;++j)
38: b[i][j]=b[i][j-1]+c[j-1];
39: for (int i=1;i<=n;++i)
40: for (int j=n;j>=i;--j)
41: {
42: teans=0;
43: remain=h-b[i][j];
44: memset(hp,0,sizeof(hp));
45: for (int k=1;k<=j-i+1;++k)
46: {
47: hp[k].pi=p[i+k-1];
48: hp[k].di=d[i+k-1];
49: }
50: tot=j-i+1;
51: for (int k=j-i+1;k>=1;--k) down(k);
52: while ((remain>=t)&&(hp[1].pi>0))
53: {
54: teans+=hp[1].pi;
55: hp[1].pi-=hp[1].di;
56: remain-=t;
57: down(1);
58: }
59: if (teans>ans) ans=teans;
60: }
61: printf("%d\n",ans);
62: return 0;
63: }
64:
[棰樼洰鎻忚堪]
鏈変竴涓猲*n鐨勮糠瀹紝姣忎釜鏂規牸閲岄兘鏈夌潃鐩稿簲鐨勬暟瀛椼備綘浠庡乏涓婅鍑哄彂錛屾瘡嬈″彲浠ュ悜涓婁笅宸﹀彸鍥涗釜鏂瑰悜鏈澶氱Щ鍔╧鏍鹼紝騫朵笖瑕佹眰浣犳瘡嬈″埌杈劇殑鏂規牸閲岀殑鏁板瓧蹇呴』澶т簬涓婁竴嬈℃墍鍦ㄦ柟鏍肩殑鏁板瓧銆傜幇鍦ㄨ姹備綘璧拌繃鐨勬柟鏍肩殑鎵鏈夋暟涔嬪拰鏈澶э紝闂繖涓渶澶у拰鏄灝戙?/p>
[杈撳叆]
杈撳叆鏁版嵁絎竴琛屼負涓や釜姝f暣鏁癗銆並錛?<=N<=100,0<=K<=N錛?/p>
鎺ヤ笅鏉ョ殑n琛岋紝姣忚鏈塶涓笉瓚呰繃integer鑼冨洿鐨勬暣鏁幫紝琛ㄧず鍦板浘涓殑鏁般?/p>
[杈撳嚭]
杈撳嚭鏁版嵁鍙湁涓琛岋紝涓烘渶澶х殑鍜屻?/p>
[杈撳叆杈撳嚭紺轟緥]
杈撳叆(maze.in) 杈撳嚭(maze.out)
3 1 25
3 6 2
4 7 9
2 3 1
[璇勫垎鏍囧噯]
瀵逛簬姣忎釜嫻嬭瘯鏁版嵁錛屽鏋滀綘鑳藉寰楀嚭姝g‘鐨勭瓟妗堬紝閭d箞浣犲皢寰楀埌婊″垎錛屽惁鍒欏緱0鍒嗐?/p>
[鍒嗘瀽]
寰堟槑鏄劇殑鍔ㄦ佽鍒掞紝搴旇鏄粠銆婃粦闆嬮偅閬撻鏀圭紪鑰屾潵鐨勩?/p>
1: #include <stdio.h>2: #define maxn 1103:4: int a[maxn][maxn];
5: int f[maxn][maxn];
6: int n,ans,k;
7: int xx[4]={0,0,1,-1};
8: int yy[4]={1,-1,0,0};
9:10: int find(int x,int y)11: {12: if (f[x][y]) return f[x][y];13: int temx,temy;
14: for (int i=0;i<4;++i)15: for (int j=1;j<=k;++j)16: {17: temx=x+xx[i]*j;18: temy=y+yy[i]*j;19: if ((temx>0)&&(temx<=n)&&(temy>0)&&(temy<=n))
20: if ((a[temx][temy]>a[x][y])&&(find(temx,temy)>f[x][y]))
21: f[x][y]=find(temx,temy);22: }23: f[x][y]+=a[x][y];24: return f[x][y];
25: }26:27: int main()
28: {29: freopen("maze.in","r",stdin);30: freopen("maze.out","w",stdout);31:32: scanf("%d%d",&n,&k);
33: for (int i=1;i<=n;++i)34: for (int j=1;j<=n;++j)35: scanf("%d",&a[i][j]);
36: printf("%d\n",find(1,1));
37: return 0;
38: }39:
浠庝粖澶╁紑濮嬭繘鍏ヤ負鏈?澶╃殑鈥滈暱娌欎竴涓涔犫濅笓棰樻椿鍔▇
涔熻榪欏嚑澶╃敤涓嶄簡writer浜嗭紝鍥犱負瀹夎鐨勬椂鍊檓s瑕侀噸鏂板惎鍔ㄣ傝タ鍖虹殑鐢佃剳鏈夎繕鍘熷崱鐨勩?/p>
To be continued.
銆愰棶棰樻弿榪般?/p>
鍋氳繃浜嗕箻縐渶澶ц繖閬撻錛岀浉淇¤繖閬撻涔熼毦涓嶅掍綘銆?/p>
宸茬煡涓涓暟涓詫紝鍙互鍦ㄩ傚綋鐨勪綅緗姞鍏ヤ箻鍙鳳紙璁懼姞浜唊涓紝褰撶劧涔熷彲涓嶅姞錛屽嵆鍒嗘垚k+1涓儴鍒嗭級錛岃榪檏+1涓儴鍒嗙殑涔樼Н錛堝鏋渒=0,鍒欎箻縐嵆涓哄師鏁頒覆鐨勫鹼級瀵筸 鐨勪綑鏁幫紙鍗砿od m錛変負x;
鐜版眰x鑳借揪鍒扮殑鏈灝忓煎強璇ユ儏鍐典笅k鐨勬渶灝忓鹼紝浠ュ強x鑳借揪鍒扮殑鏈澶у煎強璇ユ儏鍐典笅鐨刱鐨勬渶灝忓鹼紙鍙互瀛樺湪x鐨勬渶灝忓間笌鏈澶у肩浉鍚岀殑鎯呭喌錛夈?/p>
銆愯緭鍏ャ?/p>
絎竴琛屼負鏁頒覆錛岄暱搴︿負n 婊¤凍2<=n<=1000錛屼笖鏁頒覆涓笉瀛樺湪0錛?/p>
絎簩琛屼負m錛屾弧瓚?<=m<=50銆?/p>
銆愯緭鍑恒?/p>
鍥涗釜鏁幫紝鍒嗗埆涓簒鐨勬渶灝忓?鍜?璇ユ儏鍐典笅鐨刱錛屼互鍙妜鐨勬渶澶у煎拰 璇ユ儏鍐典笅鐨刱錛屼腑闂寸敤絀烘牸闅斿紑銆?/p>
銆愭牱渚嬭緭鍏ャ?/p>
4421
22
銆愭牱渚嬭緭鍑恒?/p>
0 1 21 0
鏃㈢劧棰樼洰瑕佹眰鐨勯兘鏄箻鍙風殑鏈灝忓鹼紝閭d箞鎴戜滑鑷劧鍦板氨浼氭兂鍒板姩褰掓暟緇勪腑璁板綍涔樺彿鐨勬渶灝忓箋俧[i][j]琛ㄧず0~i鐨勪覆杈懼埌j榪欎釜浣欐暟鎵闇鏈灝戠殑涔樺彿鏁般傞澶勭悊b[i][j]琛ㄧず浠巌鍒癹鐨勬暟瀵筸鐨勪綑鏁般?/p>
1: #include <stdio.h>2: #include <string.h>
3: #define MAXINT 1000004: #define maxn 10105:6: int f[maxn][50];
7: int b[maxn][maxn];
8: int n,m;
9: char s[maxn];
10: int tem;
11:12: int main()
13: {14: freopen("input.txt","r",stdin);15: freopen("output.txt","w",stdout);16:17: scanf("%s%d",s,&m);
18: n=strlen(s);19: for (int i=0;i<n;++i)20: for (int j=0;j<m;++j)21: f[i][j]=MAXINT;22: for (int i=0;i<n;++i)23: {24: tem=(tem*10+s[i]-'0')%m;25: f[i][tem]=0;26: }27: for (int i=0;i<n;++i)28: {29: tem=0;30: for (int j=i;j<n;++j)31: {32: tem=(tem*10+s[j]-'0')%m;33: b[i][j]=tem;34: }35: }36: for (int i=0;i<n;++i)37: for (int j=0;j<m;++j)38: if (f[i][j]<MAXINT)
39: for (int k=i+1;k<n;++k)40: {41: tem=(j*b[i+1][k])%m;42: if (f[i][j]+1<f[k][tem]) f[k][tem]=f[i][j]+1;
43: }44: for (int i=0;i<m;++i)45: if (f[n-1][i]<MAXINT)
46: {47: printf("%d %d ",i,f[n-1][i]);
48: break;
49: }50: for (int i=m-1;i>=0;--i)51: if (f[n-1][i]<MAXINT)
52: {53: printf("%d %d\n",i,f[n-1][i]);
54: break;
55: }56: return 0;
57: }58:
銆愰棶棰樻弿榪般?/p>
n涓漢鍦ㄥ仛浼犻掔墿鍝佺殑娓告垙,緙栧彿涓?-n銆?/p>
娓告垙瑙勫垯鏄繖鏍風殑錛氬紑濮嬫椂鐗╁搧鍙互鍦ㄤ換鎰忎竴浜烘墜涓婏紝浠栧彲鎶婄墿鍝佷紶閫掔粰鍏朵粬浜轟腑鐨勪換鎰忎竴浣嶏紱涓嬩竴涓漢鍙互浼犻掔粰鏈帴榪囩墿鍝佺殑浠繪剰涓浜恒?/p>
鍗崇墿鍝佸彧鑳界粡榪囧悓涓涓漢涓嬈★紝鑰屼笖姣忔浼犻掕繃紼嬮兘鏈変竴涓唬浠鳳紱涓嶅悓鐨勪漢浼犵粰涓嶅悓鐨勪漢鐨勪唬浠峰間箣闂存病鏈夎仈緋伙紱
姹傚綋鐗╁搧緇忚繃鎵鏈塶涓漢鍚庯紝鏁翠釜榪囩▼鐨勬諱唬浠鋒槸澶氬皯銆?/p>
銆愯緭鍏ャ?/p>
絎竴琛屼負n,琛ㄧず鍏辨湁n涓漢錛?6>=n>=2錛夛紱
浠ヤ笅涓簄*n鐨勭煩闃碉紝絎琲+1琛屻佺j鍒楄〃紺虹墿鍝佷粠緙栧彿涓篿鐨勪漢浼犻掑埌緙栧彿涓簀鐨勪漢鎵鑺辮垂鐨勪唬浠鳳紝鐗瑰埆鐨勬湁絎琲+1琛屻佺i鍒椾負-1錛堝洜涓虹墿鍝佷笉鑳借嚜宸變紶緇欒嚜宸憋級錛屽叾浠栨暟鎹潎涓烘鏁存暟(<=10000)銆?/p>
(瀵逛簬50%鐨勬暟鎹紝n<=11)銆?/p>
銆愯緭鍑恒?/p>
涓涓暟錛屼負鏈灝忕殑浠d環鎬誨拰銆?/p>
銆愭牱渚嬭緭鍏ャ?/p>
2
-1 9794
2724 鈥?
銆愭牱渚嬭緭鍑恒?/p>
2724
鏃墮棿鍒頒簡鍟妦 鏄庡ぉ鍐嶇戶緇啓銆?/strike>
鏄竴涓敤浜岃繘鍒舵潵琛ㄧず鍥劇殑鐘舵佺殑鍔ㄦ佽鍒掞紝鎴栬呰鏄蹇嗗寲鎼滅儲銆俧[i][j]涓紝i鏉ヨ〃紺哄浘鐨勪簩榪涘埗鐘舵侊紝j琛ㄧず榪欎釜鐘舵佷腑絎竴涓偣銆?/p>
1: #include <stdio.h>2: #include <iostream>3: #define maxn 204: #define MAXINT 10000005: using namespace std;6:7: int dis[maxn][maxn];
8: int n;
9: int f[70000][20];
10: int ans=MAXINT;
11:12: int find(int a,int b)13: {14: if (f[a][b]!=MAXINT) return f[a][b];15: int tem=a;
16: a-=(1<<b);17: if (!a)
18: {19: f[tem][b]=0;20: return 0;
21: }22: for (int i=0;i<n;++i)23: if ((1<<i)&a)
24: f[tem][b]=min(find(a,i)+dis[b][i],f[tem][b]);25: return f[tem][b];
26: }27:28: int main()
29: {30: freopen("input.txt","r",stdin);31: freopen("output.txt","w",stdout);32:33: scanf("%d",&n);
34: for (int i=0;i<n;++i)35: for (int j=0;j<n;++j)36: scanf("%d",&dis[i][j]);
37: for (int i=0;i<(1<<n);++i)38: for (int j=0;j<n;++j)39: f[i][j]=MAXINT;40: for (int i=0;i<n;++i)41: if (find((1<<n)-1,i)<ans)
42: ans=find((1<<n)-1,i);43: printf("%d\n",ans);
44: return 0;
45: }46:
銆愰棶棰樻弿榪般?/p>
澶╄媿鑻嶏紝閲庤尗鑼紝JSZX鐨勮彍楦熶滑鏉ュ埌OI鐗у満鏃呮父錛岀湅鍒頒簡濂藉濂藉鐨勭墰銆侽I鐗у満鎵鏈夌殑鐗涢兘瑙夊緱鑷繁鐨凴p鏈楂橈紙綆縐癛P鐗涳級錛屼負姝や粬浠父浜夎涓嶄紤銆備簬鏄紝浠栦滑璁㎎SZX鐨勮彍鑿滀滑鐢ㄦ渶鏈鏈寸礌鐨勬柟娉曟壘鍑鴻繖鍙猂P鐗涖?/p>
緇忚繃璁ㄨ錛屾渶鑿滅殑mmk鎯沖嚭浜嗘渶鏈寸礌鐨勬柟娉曪細
鎴戜滑瑕佷互cows鐨勫悕瀛椾負綰跨儲錛屾潵鎵懼嚭RP鐗涖?/p>
棣栧厛錛屽緱鍒皀澶寸墰鐨勫悕瀛楁竻鍗曪紙姣忓ご鐗涚殑鍚嶅瓧鏄竴涓粎鍖呭惈灝忓啓瀛楁瘝鐨勫瓧絎︿覆錛屼笖榪欎簺鐗涚殑璇誨啓鏂瑰紡姣旇緝鐗規畩鈥斾粠鍙沖埌宸︼級錛岀劧鍚庡姣忓ご鐗涜繘琛屾楠岋紝媯楠屾寜鐓х墰鐨勮鍐欐柟寮忚繘琛屻傝鍒欏涓嬶細
1錛嶳p 鐗涚殑鍚嶅瓧涓繀欏繪湁瀛愪覆鈥渏szxoier鈥?/p>
2錛庡皢鍚嶅瓧涓殑姣忎釜鈥渃ow鈥濈殑鏇挎崲涓衡渂ird鈥濄?/p>
3錛庤綆桼p鍊鹼細A涓哄悕瀛椾腑瀛愪覆鈥渞鈥濈殑涓暟錛?/p>
B涓哄悕瀛椾腑瀛愪覆鈥減鈥濈殑涓暟錛?/p>
C涓哄悕瀛椾腑瀛椾覆鈥渞p鈥濈殑涓暟錛?/p>
Rp鍊煎嵆涓?脳A+5脳B+20脳C銆?/p>
鏈鍚庤緭鍑篟P鐗涚殑鍚嶅瓧錛岃嫢鏈夊涓猂P鐗涳紝鍒欒緭鍑哄悕瀛楁渶鐭殑閭d釜銆?/p>
鍋囧浣犱篃鏄墰涓竴鍛橈紝灝界浣犲緢涓嶅睉榪欐牱鐨勬按棰橈紝浣嗘槸錛屼綘寰堟兂鍒癛P鐗涢偅閲屽垎鐐筊p錛屾墍浠ヤ綘鍐沖畾瑙e喅榪欓亾棰橈紝騫剁畻鍑篟P鐗涚殑Rp鏄灝戙?/p>
銆愯緭鍏ャ?/p>
絎竴琛岋紝涓涓暟n錛坣<=3000錛夈?/p>
鎺ヤ笅鏉ョ殑n琛岋紝姣忚涓涓瓧絎︿覆錛岄暱搴?lt;=300錛屾暟鎹繚璇佸瓨鍦≧P鐗涖?/p>
銆愯緭鍑恒?/p>
鍏變袱琛?/p>
絎竴琛屼負RP鐗涚殑鍚嶅瓧
絎簩琛屼負RP鐗涚殑Rp鍊?/p>
銆愭牱渚嬭緭鍏ャ?/p>
8
reioxzsjzmy
mmk
jwc
zxf
jwc
wangwei
xcy
yuhc
銆愭牱渚嬭緭鍑恒?/p>
reioxzsjzmy
5
鎴戠敤KMP鍖歸厤鐨勶紝浠g爜鎸虹煭錛岃繕姣攕tring.h鐨勫ソ鐢ㄣ?/p>
1: #include <stdio.h>2: #include <string.h>
3: #include <iostream>4: #define maxn 4005: using namespace std;6:7: int f[maxn];
8: char *aa="jszxoier",*bb="cow",*ee="rp",s[maxn];9: int a,b,c,tem,ans,anslen,len,m;
10: int n;
11: bool t;
12: char anss[400];
13:14: void initf(char *s)15: {16: memset(f,0,sizeof(f));
17: m=strlen(s);18: int k=-1;
19: f[0]=-1;20: for (int i=1;i<m;++i)21: {22: while ((k>-1)&&(s[k+1]!=s[i])) k=f[k];
23: if (s[k+1]==s[i]) ++k;
24: f[i]=k;25: }26: }27:28: void changef(char *s)29: {30: initf(s);31: int k;
32: for (int i=0;i<m;++i)33: {34: k=f[i];35: while ((k>-1)&&(s[k+1]==s[i+1])) k=f[k];
36: f[i]=k;37: }38: }39:40: int main()
41: {42: freopen("input.txt","r",stdin);43: freopen("output.txt","w",stdout);44:45: scanf("%d",&n);
46: for (int dt=1;dt<=n;++dt)47: {48: memset(s,0,sizeof(s));
49: scanf("%s",s);
50: strrev(s);51: changef(aa);52: len=strlen(s);53: int k=-1;
54: t=0;55: for (int i=0;i<len;++i)56: {57: while ((k>-1)&&(aa[k+1]!=s[i])) k=f[k];
58: if (aa[k+1]==s[i]) ++k;
59: if (k==m-1)
60: {61: t=1;62: break;
63: }64: }65: if (!t) continue;66: a=b=c=0;67: changef(bb);68: for (int i=0;i<len;++i)69: {70: while ((k>-1)&&(bb[k+1]!=s[i])) k=f[k];
71: if (bb[k+1]==s[i]) ++k;
72: if (k==m-1) ++a;
73: }74: for (int i=0;i<len;++i)75: if (s[i]=='r') ++a;
76: for (int i=0;i<len;++i)77: if (s[i]=='p') ++b;
78: changef(ee);79: for (int i=0;i<len;++i)80: {81: while ((k>-1)&&(ee[k+1]!=s[i])) k=f[k];
82: if (ee[k+1]==s[i]) ++k;
83: if (k==m-1) ++c;
84: }85: tem=a*5+b*5+c*20;86: if (tem>ans)
87: {88: memset(anss,0,sizeof(anss));
89: strcat(anss,s);90: ans=tem;91: anslen=len;92: }93: else
94: if (tem==ans)
95: if (len<anslen)
96: {97: memset(anss,0,sizeof(anss));
98: strcat(anss,s);99: }100: }101: strrev(anss);102: printf("%s\n%d\n",anss,ans);
103: return 0;
104: }105:
鐢ㄥ埌浜嗗垎綾葷殑鎬濇兂銆傚浜巉[i][j]浠h〃i鍒嗕負j浠姐傛垜浠垎涓轟互涓嬩袱綾伙細
1: #include <stdio.h>2: #define maxn 3003:4: int f[maxn][maxn];
5: int n,m;
6:7: int main()
8: {9: scanf("%d%d",&n,&m);
10: f[0][0]=1;11: for (int i=1;i<=n;++i)12: for (int j=1;j<=m;++j)13: if (i-j>=0)
14: f[i][j]=f[i-j][j]+f[i-1][j-1];15: printf("%d\n",f[n][m]);
16: return 0;
17: }18:
1: #include <stdio.h>2: #define maxn 1003:4: unsigned long long f[maxn];5: int n,m;
6:7: int main()
8: {9: f[0]=1;10: scanf("%d%d",&n,&m);
11: for (int i=1;i<=n;++i)12: {13: f[i]=f[i-1]*2;14: if (i-m-1>=0) f[i]-=f[i-m-1];
15: if (i-m-1==-1) f[i]-=1;
16: }17: printf("%I64d\n",f[n]);
18: return 0;
19: }20:
1: #include <stdio.h>2: #include <stdlib.h>3: #define maxn 4004:5: int f[maxn][maxn];
6: int t[maxn];
7: struct ss
8: {9: int root,num;
10: } a[maxn];11: int n,m;
12: int w[maxn];
13:14: int cmp(const void*a,const void*b)15: {16: ss c=*(ss*)a,d=*(ss*)b;17: if (c.root<d.root) return -1;18: if (c.root>d.root) return 1;19: return 0;
20: }21:22: void dp(int x)23: {24: for (int i=t[x];i<t[x+1];++i)25: {26: int k=a[i].num;
27: for (int j=0;j<=m;++j) f[k][j]=f[x][j]+w[k];28: dp(k);29: for (int j=1;j<=m;++j)30: if (f[k][j-1]>f[x][j])
31: f[x][j]=f[k][j-1];32: }33: }34:35: int main()
36: {37: scanf("%d%d",&n,&m);
38: for (int i=1;i<=n;++i)39: {40: scanf("%d%d",&a[i].root,&w[i]);
41: a[i].num=i;42: }43: a[0].root=-1;44: qsort(a,n+1,sizeof(ss),cmp);
45: for (int i=1;i<=n;++i)46: if (!t[a[i].root])
47: t[a[i].root]=i;48: t[n+1]=n+1;49: for (int i=n;i>=0;--i)50: if (!t[i])
51: t[i]=t[i+1];52: dp(0);53: printf("%d\n",f[0][m]);
54: return 0;
55: }56:
鐩稿叧鍐呭瑙佲?a >銆愪紶閫侀棬銆戠櫨搴OIP鍚х紪紼嬫寫鎴樿禌鐩稿叧甯栧瓙鈥?/p>
絎笁棰樻槸涓閬撴湁渚濊禆鐨勮儗鍖呴棶棰樸備粖澶ヾev闂埌浜嗭紝浜庢槸鍙堝洖蹇嗕簡涓涓嬨傚緪鎸佽 澶х墰鐨勯泦璁槦璁烘枃涓叧浜庢硾鍖栫墿鍝佺殑騫惰繕鏄笉澶噦銆備絾鏄榪欑鑳屽寘鏈夌偣浜嗚嚜宸辯殑鎰熸偀銆?/p>
榪欓亾棰樼洰瀵規垜鏉ヨ鏈変袱涓惎鍙戠偣錛?/p>
鐢ㄧ粨鏋勪綋璁板綍鍏崇郴錛宎[i].root鏄i涓叧緋葷殑鐖惰妭鐐癸紝a[i].num鏄i涓叧緋葷殑瀛愯妭鐐廣傚皢鏁扮粍鎸塺oot鎺掑簭銆傜劧鍚庣敤t[i]璁板綍i榪欎釜鐐圭殑鍎垮瓙鍦╝涓殑璧峰浣嶇疆銆?/p>
1: struct ss
2: {3: int root,num;
4: } a[maxn];5: int t[maxn];
6:7: void init()
8: {9: qsort(a,n,sizeof(ss),cmp);
10: for (int i=1;i<=n;++i)11: if (!t[a[i].root])
12: t[a[i].root]=i;13: t[n+1]=n+1;14: for (int i=n;i>0;--i)15: if (!t[i])
16: t[i]=t[i+1];17: }18:
榪欐牱絎琲涓偣鐨勫瓙鑺傜偣鍦╝涓殑浣嶇疆灝辨槸浠巘[i]鍒皌[i+1]-1銆?/p>
鍏嶅幓浜嗛摼琛ㄧ殑綣佺悙錛屾晥鐜囪繕鐩稿綋楂樸?/p>
涓昏鎬濇兂灝辨槸瀵逛簬i鐨勮妭鐐箂錛宖[s]寮哄埗璧嬪間負f[i]錛岀劧鍚庡己鍒跺姞鍏[s],瀵箂榪涜澶勭悊錛屽啀鏇存柊f[i]銆?/p>
鐩稿綋媯掔殑瑙e喅闂銆?1: void dp(int x)2: {3: for (int i=t[x];i<t[x+1];++i)4: {5: int k=a[i].num;
6: for (int j=0;j<=V;++j) f[k][j]=f[x][j]+w[k];7: dp(k);8: for (int j=v[k];j<=V;++j)9: if (f[k][j-v[k]]>f[x][j])
10: f[x][j]=f[k][j-v[k]];11: }12: }