原題鏈結
2種思路
第1種:
#include
#include
#include
#include
#include
#include
using
namespace std;
int n,ans=
1005
;int a[
1005
],b[
1005];
int f[
1005][
10005];
//這個意思是前i件物品的差值為j時的翻轉次數是dp[i][j];
int p=
5001
;int
main()
cout
}
第二種:
轉換為揹包問題
首先把數字大的牌全部翻轉到上面;
然後把最多可以減少的點數作為揹包的體積;
每乙個多公尺諾骨牌看作乙個物品,他的體積是翻轉以後可以減少的點數;
#include
using
namespace std;
const
int maxn=
1005
;int w[maxn]
;int dp[maxn]
[maxn]
;int v[maxn]
;int vs[maxn]
[maxn]
;int basic=0;
intmain()
else
}//dp[i][j]的意思是前i個物品,差值減少j最小需要翻轉的次數;
//vs[i][j]的意思是前i個物品,是否可以減少j的差值;
//答案就是減小的差值盡可能的大,並且翻轉次數盡可能小;
for(
int i=
1;i<=n;i++
)else}}
}int i;
for(i=tot;i>=
0;i--)}
printf
("%d\n"
,basic+dp[n]
[i])
;//開始已經翻轉了basic次才構成了只是上邊大的情況;
return0;
}
洛谷 1164 小A點菜(動態規劃的揹包問題)
題目背景 uim神犇拿到了uoi的ra 鐳牌 後,立刻拉著 小a到了一家 餐館,很低端的那種。uim指著牆上的價目表 太低階了沒有選單 說 隨便點 題目描述 不過uim由於買了一些輔 e 輔 ro 書,口袋裡只剩m元 m 10000 餐館雖低端,但是菜品種類不少,有n種 n 100 第i種賣ai元 ...
揹包型動態規劃 揹包問題1
在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小為m,每個物品的大小為a i 示例 樣例 1 輸入 3,4,8,5 backpack size 10 輸出 9 樣例 2 輸入 2,3,5,7 backpack size 12 輸出 12 首先要明確一點,在揹包問題中,陣列大小和總稱重有...
P2347 砝碼稱重 動態規劃遞推,揹包,洛谷
參考題解 點選進入 紀念我第一道沒理解題意的題 但不包括乙個砝碼也不用的情況 這句話我看成了每個砝碼起碼放乙個 然後就做不出來了 思路 1.這題資料很小,1000,所以其實沒必要把多重揹包用二進位制優化成01揹包,直接乙個個拆開就好了 2.建立陣列f 2000 用來f j 1表示存在重量為j這種可能...