codeforces gym 102263
題目大意
給乙個數,通過加減10x( x>=0 ) 的運算來得到這個數,求最少的運算次數。如:231 = 100 + 101 + 101 + 101 +102 + 102,結果為6。
999 = 103 - 100 ,結果為2。
題目分析
線性dp。dp[ i ][ j ],i表示數字,j為0或1,0表示這一數字採用先加後減的方式得到該數字上的數,1表示這一數字只採用加的方式得到該數字上的數。若後乙個數隻採用加的方式所用的運算次數則和得到前面數字的方式無關。若後一數字採用先加後減的方式則會需考慮得到前面數字的方式:若前乙個數字也採用先加後減的方式,那麼可以看作前面一位向後面一位 「 借1 」,前面一位可以省去 「 先加 」這一環節,同時後面的這個數字在減的時候可以少減一位(被前面的數字減去一位)。詳細轉換公式見**。
**
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int mn=
1e5+10;
char s[mn]
;int dp[mn][5
];intmain()
res=
min(dp[len-1]
[0],dp[len-1]
[1])
;printf
("%d"
,res)
;return0;
}//原式:dp[i-1][0]+1+10-(s[i]-'0')-1-1,後面兩個1,乙個為減去前面乙個數字的「先加」的操作,再減去前面乙個數字「借1」的操作。
動態規劃 什麼是動態規劃?
先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...
mysql動態規劃 動態規劃
動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...
《動態規劃》 ACM 動態規劃例題詳解
描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...