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;
}
浙公网安备 33010602011771号