感覺還是對揹包問題不太熟練。
思路:先把n個卡牌第一層加起來記為sum1,第二層卡牌加起來記為sum2。如果sum1sum2。v=sum1-sum2.所以我們就將問題轉換成了,揹包總體積為v,n個物品,每個物品的價值為1,體積為(a[i]-b[i])*2。求使得剩餘體積盡量小的揹包問題。
體積會出現負數,所以要加以處理。
#include using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
const int maxn=1005;
const int n=6000;
int a[maxn],b[maxn];
int dp[12*maxn];
int v[maxn];
int main()
if(sum1=-5000;j--)
} int i;
for(i=v;i>=1;i--)
if(inf!=dp[i+n]) break;
printf("%d",dp[i+n]);
return 0;
}
洛谷 P1282 多公尺諾骨牌 (揹包dp)
題目描述 多公尺諾骨牌有上下2個方塊組成,每個方塊中有1 6個點。上方塊中點數之和記為s1,下方塊中點數之和記為s2,它們的差為 s1 s2 例如在圖8 1中,s1 6 1 1 1 9,s2 1 5 3 2 11,s1 s2 2。每個多公尺諾骨牌可以旋轉180 使得上下兩個方塊互換位置。程式設計用最...
類似揹包問題的動態規劃 洛谷P1282多公尺諾骨牌
原題鏈結 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時的翻...
洛谷 P1282 多公尺諾骨牌 01揹包
傳送門 題目描述 多公尺諾骨牌有上下2個方塊組成,每個方塊中有1 6個點。現有排成行的 上方塊中點數之和記為s1,下方塊中點數之和記為s2,它們的差為 s1 s2 例如在圖8 1中,s1 6 1 1 1 9,s2 1 5 3 2 11,s1 s2 2。每個多公尺諾骨牌可以旋轉180 使得上下兩個方塊...