本蒟蒻的第一篇題解,這是一道十足的水題。
題意如下:
選取和不超過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揹包啊...