邮票
邮票
| Time Limit: 1500MS | Memory Limit: 65535KB |
| Submissions: 227 | Accepted: 46 |
Sample Input
5 2 1 3
Sample Output
13
解析:
大致题意:就是用所给的邮票面值,在不多于K张的范围内,最多能连续贴到多少.
大致思路:这道题的面值可以多次使用,很明显的多重背包;那这里就用DP来解决吧,代码如下:
# include<stdio.h>//DP,多重背包 # define M 9999999 int sign[55],f[2000005]; int min(int a,int b) { return (a<b?a:b); } int main() { int num,n,i,j; scanf("%d %d",&num,&n); for(i=0;i<n;i++) scanf("%d",&sign[i]); f[0]=0; for(i=1;;i++) { f[i]=M; for(j=0;j<n;j++) if(sign[j]<=i) f[i] = min(f[i],f[i-sign[j]]+1); if(f[i]>num)//如果最小的数目都超过了num,那这个i就一定贴不出 break; } printf("%d\n",i-1); return 0; }
浙公网安备 33010602011771号