題目描述 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種本子之後所有的本子每種紙最多還能用多少,搜尋的時候,如果發現某種顏色的紙,就算之後所有的該種顏色的紙全部用上都無法超越現在的...