Problem Description
设有已知面额的邮票m种,每种有n张,用总数不超过n张的邮票,能从面额1开始,最多连续组成多少面额。(1≤m≤100,1≤n≤100,1≤邮票面额≤255)
Input
输入有多组数据,每组数据第一行:m,n的值,中间用一空格隔开。第二行:A[1..m](面额),每个数中间用一空格隔开。
Output
对于每组数据输出连续面额数的最大值
Sample Input
3 4 1 2 4
Sample Output
14
//解题报告:简单DP
//标程:
#include<stdio.h> #include<string.h> int dp[100][30000],p[30000]; int main() { //freopen("a,txt","r",stdin); int a[110],n,m,i,j,k; while(scanf("%d%d",&n,&m)!=EOF) { int sum=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); sum=sum+a[i]*m; } memset(dp,0,sizeof(dp)); memset(p,0,sizeof(p)); dp[0][0]=1; for(i=1;i<=m;i++) { for(j=0;j<n;j++) { for(k=0;k<=sum;k++) if(dp[i-1][k]) { dp[i][k+a[j]]=1; p[k+a[j]]=1;} } } for(i=1;i<=sum;i++) if(!p[i]) break; printf("%d\n",i-1); } return 0; }