題意:乙個商店提供多種商品,當使用者單獨購買商品時有乙個**,當使用者組合購買時可以獲得優惠,現在提供多種優惠方案和需要購買的物品總數,問最大的優惠是多少。輸入2
7 3 2
8 2 5
21 7 3 5
2 7 1 8 2 10
表示有 2 種商品,編號分別是 7 和 8,分別要購買的數量是 3 和 2,2 和 5 是它們的單件購買**。
接下來是 2 種優惠。第 1 種優惠有 1 種商品:3 個 7 號商品**為 5,第 2 種優惠是 2 種商品:1 個 7 號商品和 2 個 8 號商品**是 10。
最多隻允許有 5 件商品。
用6進製表示所有狀態。
#define n 55
int six[7] = ;//因為最多只有5種物品而且每種物品最多只有5件,所以可以用6進製表示每種物品的狀態
int index[1001];//吧編號都記錄為1,2,3,4...
int dp[50000];
int n,m;
struct nodebask[10];
struct node1offer[100];
int cal(int s)
return true;
}int main()}}
}int ans = max;
for(i=0;i<=state;i++)
printf("%d\n",ans);
}return 0;
}
狀態壓縮dp poj2411 1 2磚塊
一開始想著用00,11表示同乙個磚,但是這樣的話狀態轉移就難了,然後看題解。題解的狀態就不會衝突。分析 用1 2的磚去恰好鋪滿n m的空間,對於第k行第j列,有3種情況將該點鋪滿 1 由第k 1行第j列磚豎著鋪將第k行第j列鋪滿 2 由第k行第j列被橫鋪磚鋪滿 3 第k行第j列磚豎著鋪將該點鋪滿 所...
狀態壓縮DP poj2411 矩形填充木塊問題
從某場筆試遇到的題,群裡太多人改網上 只能對60 我是100 特地記錄下。分析 首先我們定義如下這種填充表示方式 如果乙個骨牌是橫著放的,那麼它所在的兩個方格都填充0.如果它是豎著放的,那麼它所在的兩個格仔中,上面的那個填1,下面的這個填0.如下圖所示 圖來自 部落格 右邊的圖 0 和 1互換就好了...
hiho 1170 機械人 記憶化搜尋 狀態壓縮
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 小冰的n個機械人兄弟排成一列,每個機械人有乙個顏色。現在小冰想讓同一顏色的機械人聚在一起,即任意兩個同顏色的機械人之間沒有其他顏色的的機械人。假設任意相鄰的兩個機械人可以交換位置,請問最少需要多少次交換?第一行為乙個整數t,為資...