#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int d[36][36],dp[1036],res[36]; int main(){ int s,n; while(scanf("%d",&s) == 1 && s){ scanf("%d",&n); for(int i = 1;i <= n;i++){ scanf("%d",&d[i][0]); for(int j = 1;j <= d[i][0];j++) scanf("%d",&d[i][j]); memset(dp,0x3f,sizeof(dp)); dp[0]=0; for(int j = 1;j <= 1001;j++){ for(int k=1; k<=d[i][0];k++){ if(j - d[i][k] >= 0) dp[j] = min(dp[j],dp[j-d[i][k]] + 1); } if(dp[j] > s){ res[i] = j - 1; break; } } } int lo,num=-1; for(int i = 1;i <= n;i++){ if(res[i] > num){ lo = i; num = res[i]; } else if(res[i] == num){ if(d[i][0] < d[lo][0]){ lo = i; } else if(d[i][0] == d[lo][0]){ int flag=0; for(int j = d[i][0];j > 0;j--){ if(d[i][j] != d[lo][j]){ flag = d[i][j] < d[lo][j]; break; } } if(flag) lo = i; } } } printf("max coverage = %4d :",num); for(int i = 1; i <= d[lo][0];i++) printf("%3d", d[lo][i]); printf("\n"); } }
uva 242 DP 求s张邮票可以连续组合成最大面值多少的邮票
猜你喜欢
转载自blog.csdn.net/sky_zdk/article/details/78454276
今日推荐
周排行