#define MAXN 10005 #define INF 100000000 #define eps 1e-11 #define L(x) x<<1 #define R(x) x<<1|1 using namespace std; int f[240005], v, used[240005]; int main() { //freopen("d:/data.in","r",stdin); //freopen("d:/data.out","w",stdout); int sum, i, c[7], w[7], m[7],cas = 0, j; while(scanf("%d%d%d%d%d%d", &m[1], &m[2], &m[3], &m[4], &m[5], &m[6])) { if(m[1] == 0 && m[2] == 0 && m[3] == 0 && m[4] == 0 && m[5] == 0 && m[6] == 0) break; sum = 0; for(i = 1; i <= 6; i++) { c[i] = w[i] = i; sum += c[i] * m[i]; } printf("Collection #%d:\n", ++cas); if(sum & 1) { puts("Can't be divided.\n"); } else { sum /= 2; memset(f, 0, sizeof(f)); f[0] = 1; for(i = 1; i <= 6; i++) { for(j = 0; j <= sum; j++) used[j] = 0; for(j = c[i]; j <= sum; j++) { if(!f[j] && f[j - c[i]] && used[j - c[i]] + 1 <= m[i]) { f[j] = 1; used[j] = used[j - c[i]] + 1; } } } if(f[sum]) { puts("Can be divided.\n"); } else puts("Can't be divided.\n"); } } return 0; }
POJ 1742Coins
很裸的背包可行性问题
#include #include #include #include
POJ 2392 Space Elevator
这个题的多了一个限制条件,实际上只要按限制条件从小到大排序就行
#include #include #include #include
裸题不解释
#include #include #include #include
其实就是个0-1背包变形,对同种颜色的衣服,把一个人洗所有衣服的时间算出来,除以二,然后看能达到的最大容量,这就可以保证两人的洗衣时间尽量平均了。也可以用多重背包的做法做,只要把件数都设成1就行。
#include #include #include #include