洛谷 P2549 計算器寫作文

2022-04-06 23:19:30 字數 986 閱讀 5193

揹包,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 #include5

6using

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...