揹包,f[i]表示計算器位數為i時,可獲得的最大分值.
本題與01揹包不同的地方在於,物品的擺放順序對答案是有影響的,例如兩個字串a,b,那麼就會出現a+b和b+a兩種情況(注意這是字串),
而這又違背了dp的無後效性
因為我們先轉移的i物品一定是在後轉移的i+1物品的前面,就是說串i+1一定是加在了串i的後面某個位置(如果能加的話)。
所以顯然也有可能是i+1這個串出現在i這個串的前面,所以顯然現在是有後效性的.
那怎麼辦呢?排序!(請看**cmp函式)
還有就是因為本題的f不是int,所以重新定義了一下max.
1 #include2 #include3 #include4 #include56using
namespace
std;78
intd,n,ppp;
9string g[10001],f[201
];10 mapa;
1112 inline void
make_map()
2425 inline bool cmp(string l,string
b) 30
31 inline string _max(string l,string
b) 42
43int
main()
52 sort(g+1,g+n+1
,cmp);
53for(int i = n;i >= 1; i--)
54for(int j = d;j >= g[i].length(); j--)
55 f[j] = _max(f[j],f[j-g[i].length()] +g[i]);
56if(f[d][0] == '0'
)60for(int i = ppp;i < f[d].length(); i++)
61 cout <62return0;
63 }
洛谷 P1022 計算器的改良
題目背景ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。題目描述 為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5 ...
洛谷 P1022 計算器的改良
題目背景 ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。題目描述 為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5...
洛谷 P1022 計算器的改良
題目 計算器的改良 思路 把方程以 為界拆成兩段,對於每一段假設前面沒有 號,就新增乙個 號,且每一段的結尾加乙個 號。再把兩段的未知數係數和常數項合併,移項,化係數為1求得。注意當常數項為0時要特殊處理,避免出現精度問題。includeusing namespace std string a in...