Mr Zz

导航

Holding Bin-Laden Captive!

题目描述: 就是 1 分 2 分 5分硬币 各给你多少个  问你你不能得到最小硬币之和是多少 ?

母函数  刚开始居然wa了,是因为自己没有注意到在第二层循环内变量的界限的变化,我写成了n+2*m+。。这是 j+k的变换的界限。

#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int c1[10000];
int c2[10000];
void work(int num) {
	for(int i=0;i<=num;i++) {
		c1[i] = c2[i];
	}
	memset(c2,0,sizeof(c2));
}
int main(){
	int n,m,x;
	freopen("t.txt","r",stdin);
	while(scanf("%d%d%d",&n,&m,&x)!=EOF){
		if(n==0&&m==0&&x==0)
			break;
		if(n==0) {
			printf("%d\n",1);
			continue;
		}
		memset(c1,0,sizeof(c1));
		memset(c2,0,sizeof(c2));
		for(int i=0;i<=n;i++) {
			c1[i] = 1;
		}
		for(int j=0;j<=n;j++) {
			for(int k=0;k<=2*m;k+=2) {
				c2[j+k] += c1[j];
			}
		}
		work(2*m+n);
		for(int j=0;j<=(n+2*m);j++) {
			for(int k=0;k<=5*x;k+=5) {
				c2[j+k] += c1[j];
			}
		}
		work(n+2*m+5*x);
		int line = n+2*m+5*x;
		for(int i=0;i<=line+1;i++) {
			if(c1[i]==0) {
				printf("%d\n",i);
				break;
			}
		}
	}
	return 0;
}

  

posted on 2011-10-12 19:31  Mr Zz  阅读(230)  评论(0)    收藏  举报