hdu 2126 Buy the souvenirs
2013-02-28 16:10
204 查看
hdu 2126
m元,n种纪念品,求能买最多种数的方法数
m元,n种纪念品,求能买最多种数的方法数
#include<stdio.h> #include<string.h> #define maxn 550 #define INF 1<<30 int dp[maxn][35],n,m,t,flag; int c[35],w[35]; int main() { int i,j,k; scanf("%d",&t); while(t--) { memset(c,0,sizeof(c)); memset(w,1,sizeof(w)); memset(dp,0,sizeof(dp)); scanf("%d %d",&n,&m); flag=-1; for(i=0;i<n;i++) scanf("%d",&c[i]); for(i=0;i<m;i++) { for(j=0;j<=n;j++) dp[i][j]=INF; } //for(j=0;j<=n;j++) //这是错的,因为0元只能买0种物品 // dp[0][j]=1; dp[0][0]=1; //起点 for(i=0;i<n;i++) { for(j=m;j>=c[i];j--) //花j元 { for(k=n;k>=1;k--) //买k种 { if(dp[j-c[i]][k-1]!=INF) { //dp[j][k]=dp[j-c[i]][k-1]; if(dp[j][k]==INF) dp[j][k]=dp[j-c[i]][k-1]; else dp[j][k]+=dp[j-c[i]][k-1]; if(dp[j][k]!=INF&&k>flag) flag=k; //计最大种数 } } } } //printf("flag=%d\n",flag); int s=0; //计组合数 for(i=1;i<=m;i++) { if(dp[i][flag]!=INF) s+=dp[i][flag]; } if(s==0) printf("Sorry, you can't buy anything.\n"); else printf("You have %d selection(s) to buy with %d kind(s) of souvenirs.\n",s,flag); } return 0; }
相关文章推荐
- hdu 2126 Buy the souvenirs(求方案数的背包)
- hdu 2126 Buy the souvenirs(记录总方案数的01背包)
- hdu 2126 Buy the souvenirs (01背包输出方案数)
- Buy the souvenirs(hdu(2126)
- HDU-2126 Buy the souvenirs (DP)
- hdu 2126 Buy the souvenirs(求方案数)
- hdu 2126 Buy the souvenirs
- HDU 2126 Buy the souvenirs
- HDU 2126 Buy the souvenirs
- [HDU 2126] Buy the souvenirs (动态规划)
- HDU 2126 Buy the souvenirs
- HDU 2126 - Buy the souvenirs(01背包)
- HDU 2126 Buy the souvenirs
- HDU 2126 Buy the souvenirs(DP:01背包)
- hdu 2126 Buy the souvenirs(01背包求最大容量方法数)
- HDU 2126 Buy the souvenirs (贪心&0-1背包最优解的个数)
- HDU 2126 (背包方法数) Buy the souvenirs
- Buy the souvenirs - HDU 2126 背包dp
- hdu 2126 Buy the souvenirs(0-1+最大方案数)
- HDU2126——背包DP(开状态)——Buy the souvenirs