poj 1742 Coins

/* Name: poj 1742 Coins Author: Unimen Date: 14/05/2011 10:14 Description: 楼天成男人八题之一 多重背包 */ /* 解题报告:多重背包题,为体积与价值相等的特殊情况 1、可以采有计数的方法代替单调队列将时间复杂度降到o(vn) 注:计数的这种方法解决多重背包时有限制,只能解决体积与价值相等的情况 */ #include #include using namespace std; struct Coin { int v; int c; }Coins[110]; int value[100010]; int used[100010]; //计数数组 int n, m; int main() { int i, j, temp; int nCount; while(cin>>n>>m && (m||n)) { //输入 for(i=0; i>Coins[i].v; for(i=0; i>Coins[i].c; memset(value, 0, sizeof(value)); nCount = 0; for(i=0; ivalue[j]) //计数的数组的实现 { used[j] = used[j-Coins[i].v] + 1; //计数数组的实现 value[j] = temp; } } } for(i=1; i<=m; i++) { if (value[i] == i) { nCount++; } } cout<

你可能感兴趣的:(算法/数据结构)