1005 生日禮物

2021-06-29 13:45:50 字數 1606 閱讀 8237

題目描述 description

輸入描述 input description

輸入的第一行包含2個整數n(1≤n≤8),m(1≤m≤10)。表示有n種不同型別的本子和m種小寒喜歡的顏色。接下來乙個n*m的矩陣。第i行第j列的整數aij表示在第i種型別的本子中包含小寒喜歡的顏色j的紙有aij(1≤aij≤100)張。再接下來的一排n個整數b1到bn,表示每種顏色的本子在超市中有多少本(1≤bi≤5)。

輸出描述 output description

輸出包含乙個整數,表示小松最少需要折的蝴蝶數目,如果該數目超過1000,則輸出」alternative!」。(由於可能存在多種買本子的方案,所以這裡就不要求輸出具體方案了)

樣例輸入 sample input

2 32 1 2

4 8 4

5 5

樣例輸出 sample output 36

分析與**

題目的意思是,有n種書,每種裡面有m中顏色,每種顏色有若干張。 從n種書中選若干本,其中這些書中的各個顏色的頁數總和必須一樣。並且找出滿足該條件的情況下,頁數的最小值。 例如 所給例中

2 32 1 2

4 8 4

5 5 36

有兩種書,每種各5本,那麼這兩種可以是 第一種選 x本,第二種選y本,(0<=x<=5, 0<=y<=5)。這到合適的x,y滿足上條件最小值即可。

當地一本 4本, 第二本選1本。那麼 第一中顏色的紙共有 2×4+4×1 = 12 第二中 1×4+8×1 = 12第三中2×4+4×1 = 12

因此每種顏色都是12張,共36張(最小值)。 所有搜尋每種書的數目即可。 

#include using namespace std;

int n, // 表示n種不同型別的本子和m種喜歡的顏色

m;int colors[11][11]; // i型別的本子包含小寒喜歡的顏色j紙張有aij章

int bi[11]; // 每種顏色的本子在超市有多少本

int booki[11]; // 列舉第i類本子的數量

int bookipage[11]; // 記錄每種本子的總頁數

int minpage = 1001; // 最少頁數

bool isallzero = true;

int firstnpage = 0 ; // 儲存所列舉的前n本書的總頁數

void check(int m1,int n1)

minpage = min(minpage,cursum*m);

}void dfs(int i) // i表示當前選擇的第i個本子

check(m,n);

return;

} for (int j = 0; j <= bi[i]; j++) // 列舉種本子的可能數量 }

int main()

} for (int i = 1; i <= n; i++)

cin >> bi[i];

dfs(1);

if (minpage < 1001)

cout

cout<<"alternative!";

return 0;

}

codevs1005 生日禮物

時間限制 1 s 空間限制 128000 kb 題目等級 gold 輸入描述 input description 輸入的第一行包含2個整數n 1 n 8 m 1 m 10 表示有n種不同型別的本子和m種小寒喜歡的顏色。接下來乙個n m的矩陣。第i行第j列的整數aij表示在第i種型別的本子中包含小寒喜...

Codevs 1005 生日禮物

時間限制 1 s 空間限制 128000 kb 題目等級 gold 輸入描述 input description 輸入的第一行包含2個整數n 1 n 8 m 1 m 10 表示有n種不同型別的本子和m種小寒喜歡的顏色。接下來乙個n m的矩陣。第i行第j列的整數aij表示在第i種型別的本子中包含小寒喜...

codevs1005 生日禮物

這個題直接爆搜顯然很好想,但是直接爆搜而不剪枝的話最壞複雜度應該是6 10 10,顯然會 開始我並沒有想到怎麼剪枝,因此只拿了80,看過題解後恍然大悟 我們可以提前處理好第i種本子之後所有的本子每種紙最多還能用多少,搜尋的時候,如果發現某種顏色的紙,就算之後所有的該種顏色的紙全部用上都無法超越現在的...