HDU 1085 Holding Bin-Laden Captive!

题意: 给A个1元,B个2元,C个5元,问最小的不能拼出的钱是多少

考虑生成函数\(G(x)=(1+x+x^2+...+x^A)(1+x^2+x^4+...+x^{2B})(1+x^5+x^10+...+x^{5C})\)

最小的系数为0的项,其指数就是答案

#include<bits/stdc++.h>

using namespace std;

const int MAXN = 505;

int a[4];
int b[4]={0,1,2,5};
long long f[4][8005];

void solve(){
	memset(f,0,sizeof(f));
  int up=a[1]+2*a[2]+5*a[3];
  f[0][0]=1;
  for(int i=1;i<=3;i++){
    for(int j=0;j<=up;j++){
      for(int k=0;k<=a[i]&&j+k*b[i]<=up;k++){
        f[i][j+k*b[i]]+=f[i-1][j];
      }
    }
  }
  for(int i=0;;i++){
    if(f[3][i]) continue;
    cout<<i<<endl;
    return;
  }
}

int main(){
	while(~scanf("%d%d%d",a+1,a+2,a+3)){
    if(a[1]==0&&a[2]==0&&a[3]==0) return 0;
		solve();
	}
}

posted @ 2021-08-04 11:01  GhostCai  阅读(32)  评论(0)    收藏  举报