http://poj.org/problem?id=1276
题意:有N种不同个数(ni)的不同面值(di)钞票,求满足<=cash的最大面值可能
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int NUM=100005;
int f[NUM];
int main()
{
int wei[15],num[15],t,i,j,k,cash,N,MAX;
while(scanf("%d%d",&cash,&N)!=EOF)
{
for(i=0;i<N;i++)
scanf("%d%d",&num[i],&wei[i]);
memset(f,0,sizeof(f));
MAX=0;f[0]=1;
for(i=0;i<N;i++)
for(j=MAX;j>=0;j--)
if(f[j])
{
for(k=1;k<=num[i];k++)
{
t=j+k*wei[i];
if(t>cash) break;
f[t]=1;
if(t>MAX) MAX=t;
}
}
printf("%d\n",MAX);
}
return 0;
}