给出一个
对每一组邮票,求出当邮资为i时需要邮票数的最小值
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1010;
int d[maxn],ans[20],num[20],a[20][20];
int main(){
int s;
while(~scanf("%d",&s)&&s){
int n;scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&num[i]);
for(int j=1;j<=num[i];++j) scanf("%d",&a[i][j]);
memset(d,0x3f,sizeof(d));
d[0]=0;
for(int j=1;j<maxn;++j){
for(int k=1;k<=num[i]&&j-a[i][k]>=0;++k)
d[j]=min(d[j],d[j-a[i][k]]+1);
if(d[j]>s){ans[i]=j-1;break;}
}
}
int best=-1,pos=0;
for(int i=1;i<=n;++i){
if(ans[i]>best) best=ans[i],pos=i;
else if(ans[i]==best){
if(num[i]<num[pos]) pos=i;
else if(num[i]==num[pos]){
bool ok=false;
for(int j=num[i];j>0;--j)
if(a[i][j]!=a[pos][j]){
ok=a[i][j]<a[pos][j];
break;
}
if(ok) pos=i;
}
}
}
printf("max coverage =%4d :",ans[pos]);
for(int i=1;i<=num[pos];i++)
printf("%3d",a[pos][i]);
printf("\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
UVa 242 - Stamps and Envelope Size(DP)
原文地址:http://blog.csdn.net/wcr1996/article/details/48089427