洛谷P1734 最大約數和 題解

2021-10-10 22:50:59 字數 1102 閱讀 2792

本蒟蒻的第一篇題解,這是一道十足的水題。

題意如下:

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

問題分析:

我們可以把這道題看做乙個01揹包問題

翻譯一下這個問題:

有乙個大小為 s 的揹包,有 s 個物品,第 i 個物品的體積為 i,價值為i的因數之和,現在求如何放置物品,能使拿到的價值最大。

寫到這裡,做法已經很明顯了。

創立兩個陣列 dp,yue.用以存放選前i個數能得到的最大價值,yue[i]表示第i個數的約數之和(也就是價值)。

首先我們要建立乙個函式yueshu(int x)表示求x的約數之和。

int

yueshu

(int x)

if(x % i ==

0&& i ==

sqrt

(x))

//如果是平方根

}return xx-x;

//要除去 x

}

別的就沒有什麼重點了

完整**如下

#include

using

namespace std;

const

int max=

1010

;int dp[max]

;int yue[max]

;int n;

intyueshu

(int x)

if(x % i ==

0&& i ==

sqrt

(x))

}return xx-x;

}inline

intread()

while

(isdigit

(c))

return s*x;

}int

main()

for(

int i=

1;i<=n;i++)}

printf

("%d"

,dp[n]);

return0;

}

洛谷P1734 最大約數和

選取和不超過s的若干個不同的正整數,使得所有數的約數 不含它本身 之和最大。輸入格式 輸入乙個正整數s。輸出格式 輸出最大的約數之和。輸入樣例 1 複製11 輸出樣例 1 複製9 樣例說明 取數字4和6,可以得到最大值 1 2 1 2 3 9。資料規模 s 1000 01揹包,預處理出每個數的約數和...

P1734 最大約數和

選取和不超過s的若干個不同的正整數,使得所有數的約數 不含它本身 之和最大。輸入乙個正整數s。輸出最大的約數之和。輸入 1複製 11輸出 1複製 9樣例說明 取數字4和6,可以得到最大值 1 2 1 2 3 9。資料規模 s 1000 題目分析 我們可以預先處理出來所有數的約數的和,而這個和對應著我...

洛谷 1734 最大約束和

選取和不超過s的若干個不同的正整數,使得所有數的約數 不含它本身 之和最大。輸入乙個正整數s。輸出最大的約數之和。輸入 1複製 11 輸出 1複製 9 樣例說明 取數字4和6,可以得到最大值 1 2 1 2 3 9。資料規模 s 1000 題解 這不是一道打卡題了qwq!我覺得有點難想到是01揹包啊...