【JZOJ】【DP】最大約數和

題意

選取和不超過S的若干個不同的正整數,使得所有數的約數(不含它本身)之和最大。

樣例

輸入

11

輸出

9

思路

首先先算出s以內的每一個數的約數和,然後DP
蜜汁正解揹包???

代碼

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int a[2001]={0,0,1,1,3,1,6,1,7,4,8,1,16,1,10,9,15,1,21,1,22,11,14,1,36,6,16,13,28,1,42,1,31,15,20,13,55,1,22,17,50,1,54,1,40,33,26,1,76,8,43,21,46,1,66,17,64,23,32,1,108,1,34,41,63,19,78,1,58,27,74,1,123,1,40,49,64,19,90,1,106,40,44,1,140,23,46,33,92,1,144,21,76,35,50,25,156,1,73,57,117,1,114,1,106,87,56,1,172,1,106,41,136,1,126,29,94,65,62,25,240,12,64,45,100,31,186,1,127,47,122,1,204,27,70,105,134,1,150,1,196,51,74,25,259,35,76,81,118,1,222,1,148,81,134,37,236,1,82,57,218,31,201,1,130,123,86,1,312,14,154,89,136,1,186,73,196,63,92,1,366,1,154,65,176,43,198,29,148,131,170,1,316,1,100,141,203,1,270,1,265,71,104,37,300,47,106,105,226,31,366,1,166,75,110,49,384,39,112,77,284,31,234,1,280,178,116,1,332,1,202,153,218,1,312,53,184,83,194,1,504,1,157,121,190,97,258,33,232,87,218,1,476,35,130,177,255,1,270,45,328,129,134,1,456,59,214,93,208,1,450,1,286,175,140,97,396,1,142,137,440,1,294,1,220,195,218,49,531,18,250,101,226,1,390,65,274,183,152,37,568,51,154,105,316,67,396,1,364,107,266,1,528,1,160,309,244,1,330,41,442,111,254,37,523,109,166,113,302,55,534,1,256,161,170,73,656,1,211,117,416,43,438,57,316,231,176,1,492,1,394,209,404,1,366,77,274,219,182,1,810,20,184,169,420,79,378,1,376,177,314,61,524,1,274,249,344,43,582,1,460,131,194,1,636,191,196,185,298,1,618,41,463,135,200,85,696,1,202,241,561,1,414,45,310,321,314,49,672,1,346,141,316,67,522,89,466,143,302,1,924,1,214,201,386,133,438,69,328,243,362,1,808,1,334,285,334,43,450,1,640,300,314,1,620,95,226,153,568,1,759,53,346,155,230,217,744,1,232,261,548,1,690,1,466,303,236,1,806,75,394,161,428,55,486,145,532,225,242,1,1032,51,244,285,447,103,606,1,442,167,536,1,684,47,346,441,496,79,510,1,592,171,254,1,1056,107,358,225,388,1,786,81,511,287,260,109,716,59,394,177,740,1,648,1,400,467,266,49,960,24,442,249,588,55,546,113,484,183,272,145,1140,1,274,185,590,115,798,1,418,257,566,49,888,87,280,357,424,1,690,57,928,303,284,1,780,119,286,401,512,1,870,1,604,195,434,169,1075,1,343,197,680,91,594,65,526,507,296,1,1008,51,490,201,586,1,846,269,454,203,410,1,1260,1,454,281,460,193,618,1,652,351,506,61,1026,1,310,393,824,1,630,1,724,339,314,97,1112,156,316,333,478,55,1242,1,568,215,320,133,876,161,442,297,890,1,654,1,700,411,434,1,1167,71,652,373,496,1,666,137,646,305,494,1,1356,1,334,345,596,295,816,53,508,227,554,73,1344,1,340,565,605,1,690,105,940,231,470,1,1136,143,514,233,676,67,1038,1,526,555,350,145,1104,59,352,237,1036,1,978,57,820,447,356,109,972,1,586,329,638,55,1014,293,544,243,362,1,1698,111,421,245,550,205,870,1,952,364,602,61,1004,1,370,633,776,79,900,1,856,379,554,1,1176,155,376,345,764,115,1122,1,736,255,506,157,1484,1,382,393,1040,1,774,117,580,639,386,73,1276,1,958,261,586,1,942,217,694,439,392,61,1572,83,514,417,983,163,798,1,598,267,650,121,1548,75,400,501,604,1,1122,65,1153,369,404,85,1100,347,538,273,722,1,1368,1,868,275,554,169,1416,63,412,637,944,1,834,1,736,663,614,1,1356,1,682,281,946,193,846,173,844,443,422,1,2040,30,424,285,640,253,1026,217,826,287,824,61,1164,1,634,705,764,1,1158,1,988,483,434,1,1656,179,436,361,924,91,1290,81,778,401,566,373,1196,1,442,297,1352,1,1341,1,880,555,446,1,1392,135,730,561,676,67,906,185,1144,447,452,61,1921,71,610,505,806,187,918,1,688,417,1106,1,1568,95,460,573,694,139,1242,1,1240,311,464,85,1764,253,466,425,962,1,1374,209,706,315,470,361,1794,1,694,317,1076,1,954,65,916,975,638,1,1292,87,910,321,1208,1,1152,197,724,483,482,145,2088,32,634,441,730,199,1338,1,1027,471,794,1,1576,147,490,761,946,1,990,101,1414,449,494,1,1536,203,634,549,972,67,1818,1,1024,335,734,205,1356,1,502,521,1340,343,1014,77,760,627,506,73,2216,1,826,341,1004,1,1182,425,904,465,512,1,2004,1,754,513,1023,277,1374,93,778,571,842,1,1608,1,694,837,1092,79,1050,1,1564,351,524,157,1686,395,526,353,932,1,1926,1,796,641,674,217,1968,159,601,357,1208,1,1278,1,1336,663,698,109,1452,1,874,801,1036,67,1086,289,814,363,974,97,2520,71,544,441,820,451,1098,1,1198,640,890,1,2044,1,550,681,974,1,1320,165,1504,371,698,1,1872,407,814,573,838,1,1626,113,988,615,560,229,1796,1,730,377,1904,79,1470,1,850,903,566,241,1752,1,922,549,856,115,1770,233,1096,383,572,85,2220,171,574,521,1376,235,1158,69,1204,387,1082,1,2163,1,580,1149,993,103,1170,81,1540,599,854,1,1580,239,778,393,1126,175,2106,1,886,555,590,313,2244,119,742,537,1340,1,1194,281,1210,735,596,1,2172,71,1402,401,1058,1,1206,245,1156,883,602,121,2644,1,604,405,1260,247,1446,89,1072,583,1184,181,1644,1,610,969,1324,1,1662,77,1384,603,794,1,2286,542,616,413,928,1,1794,1,1744,561,620,445,1676,1,622,681,1640,91,1638,125,940,771,914,73,2280,1,1093,569,946,187,1626,257,1114,423,794,1,3108,111,634,425,1216,463,1278,189,958,651,1034,73,1968,87,1120,957,1244,1,1530,1,1786,703,644,1,1740,263,646,897,1592,1,1878,1,1228,435,650,529,2455,1,862,437,1738,1,1770,1,1156,1035,656,1,1772,419,1066,609,1334,115,1572,269,1372,443,662,1,3000,1,664,957,1000,349,1698,1,1276,447,1550,133,2126,75,826,825,1184,199,1350,117,1516,609,890,97,2720,275,676,453,1018,91,2370,201,1393,663,680,277,1836,83,994,617,1988,1,1374,77,1324,1323,686,1,2532,38,1114,461,1428,1,1386,497,1396,801,890,205,2652,1,694,465,1226,283,2358,93,1048,467,1130,121,2328,207,874,1101,1054,139,1410,1,2320,471,704,85,2516,287,874,769,1652,1,2046,101,1066,641,1034,289,2184,123,712,693,1604,289,1698,1,1366,1055,878,1,2604,1,1594,729,1268,1,1446,581,1084,483,722,1,3474,143,1054,685,1223,397,1458,1,1282,1047,1340,1,2272,1,730,897,2016,79,1821,1,1648,491,914,457,2256,299,736,665,1108,127,2634,1,1576,495,974,385,2346,219,742,681,1940,1,1878,1,1540,1395,746,1,2480,1,1210,813,1126,1,1782,521,1744,503,1094,1,2868,99,754,681,1520,607,1518,149,1432,507,1226,1,3288,107,760,933,1144,79,1938,305,2200,858,764,1,2060,397,1114,513,1352,151,2682,1,1156,835,986,313,2556,83,772,881,2492,91,1554,1,1366,951,776,469,2456,1,1426,753,1486,1,2094,317,1174,705,962,1,3480,231,1030,525,1460,319,2034,1,2023,527,1274,1,2124,289,790,1649,1394,103,1590,1,1780,723,1154,1,3252,323,1018,625,1198,235,2298,81,1408,807,800,565,2884,1,994,753,2337,1,1908,237,1210,987,1058,1,2472,1,1846,729,1524,1,1626,545,1546,1119,812,1,3462,1,814,545,1976,559,1638,1,1564,737,1322,241,2904,95,1006,1005,1234,1,2730,161,2140,551,824,85,2220,659,826,833,1576,115,2814,141,1708,747,830,337,3024,1,832,901,1868,163,1674,1,1906,1299,1412,1,2252,1,1354,561,1928,247,2166,433,1264,787,842,97,4272,42,931,1125,1270,343,1698,249,1492,567,1604,109,2676,1,1498,1041,1706,1,1710,1,2206,1211,1034,145,2616,599,856,573,1764,1,2970,89,1636,575,860,685,2988,119,862,777,2240,1,2310,1,1300,1251,866,169,3352,511,1402,581,1306,1,1950,353,2104,785,1142,85,3300,1,1114,945,1666,355,2076,1,1612,843,1994,121,2688,1,880,1605,1324,259,1770,1,2776,591,884,85,3423,359,886,793,2012,91,2550,533,1336,801,890,457,2936,1,1294,597,2000,151,2574,1,1576,1671,1094,1,2412,1,1450,809,2296,175,2238,365,1354,603,1082,265,4245,1,1114,605,1724,481,2418,153,1726,911,1466,1,2444,353,910,1377,1604,103,2160,125,2884,611,914,1,3216,469,1198,1293,1378,91,2634,1,1618,855,1334,373,3204,179,922,617,2624,271,1854,117,1390,1431,1178,1,3912,44,1684,621,1396,127,2202,737,1954,623,932,337,3516,1,1558,1041,1646,379,1878,1,1408,1011,2018,1,3770,1,940,1249,1932,1,1890,1,2440,1239,944,277,2540,635,1138,849,1892,1,3870,93,1804,635,950,385,2904,279,1210,857,2440,1,1914,185,2560,1167,956,1,3006,107,1546,1281,1688,1,2406,389,1444,963,1394,121,4200,131,1057,645,1800,1051,2286,89,1702,647,1562,1,3444,1,970,1497,2187,163,2382,285,2176,651,974,97,3516,395,1414,933,1468,1,3258,1,1954,1375,980,637,2636,123,1282,657,3170,91,2328,165,1480,1203,986,289,3240,191,1594,989,1808,1,2634,505,2224,663,1190,1,4572,291,994,665,2080,403,1998,1,2044,1287,1610,193,3048,1,1000,1845,1504,1,2562,1,2836};
//別問我怎麼搞出來的
int main()
{
	freopen("maxsum.in","r",stdin);
	freopen("maxsum.out","w",stdout);
	int m=0,n;
	scanf("%d",&n);
	for (int i = 1 ; i <= n; ++i)
	 for (int j = 1; j <= i/2; ++j)//因爲只要是小於n就行,所以還要枚舉
	   a[i]=max(a[i],a[j]+a[i-j]);//DP,a[i]表示最大和爲i的情況
     printf("%d",a[n]);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章