PKU 1742 -- Coins - xIao_wU 思维磁场 - Just Run And Never Forget I Have A Dream

PKU 1742 -- Coins

xIao.wU posted @ 2010年2月05日 08:42 in 动态规划 , 1408 阅读

    楼教主的题,没想到,然后扒了一大堆资料,感觉都不是啥好东西,关于剩余类到是没细看 - -~ 没耐心,然后发现与其说这题是01背包或者多重背包,不如说是完全背包的活用,其实给完全背包加一个限制条件,就可以了,好题啊好题。

CODE:

 

#include <iostream>
using namespace std;

const int N = 100001;
int n , m , f[N] , T[N];
int A[101] , C[101];

int main() {
	//freopen("in.txt" , "r" , stdin);
    while(scanf("%d %d", &n, &m) != EOF) {
        if(n == 0 && m == 0) break;
        memset(f , 0 , sizeof(f));
        for(int i=0; i < n; i++)
            scanf("%d", &A[i]);
        for(int i=0; i < n; i++)
            scanf("%d", &C[i]);
		f[0] = 1;
        for(int i=0; i < n; i++) {
			for(int j=1; j <= m; j++)
				T[j] = 0;
			for(int j=A[i]; j <= m; j++) {
				if(!f[j] && f[j - A[i]] && T[j - A[i]] < C[i]) {
					T[j] = T[j - A[i]] + 1;
					f[j] = 1;
				}
			}
		}
        int ret = 0;
        for(int i=1; i <= m; i++) 
            if(f[i]) ret ++;
        printf("%d\n" , ret);
    }
    return 0;
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee