poj1742(多重背包)

链接:点击打开链接

题意:给出n种钱的数量和面额,问用这些钱能拼成1~m中的值的数量

代码1:

#include 
#include 
#include 
#include 
using namespace std;
int dp[100005],w[105],v[105];
int n,m;
int main(){
    int i,j,ans;
    while(scanf("%d%d",&n,&m)!=EOF&&(m||n)){
        for(i=0;i=0),dp[i+1][j]=-1    
            if(dp[j]>=0)                //(jj||dp[j-w[i]]<=0)
            dp[j]=-1;
            else
            dp[j]=dp[j-w[i]]-1;
        }
        ans=0;
        for(i=1;i<=m;i++)
        if(dp[i]>=0)
        ans++;
        printf("%d\n",ans);
    }
    return 0;
}
代码2:
#include 
#include 
#include 
#include 
using namespace std;
int w[105],v[105],f[100005],used[100005];
int n,m;
int main(){
    int i,j,ans;
    while(scanf("%d%d",&n,&m)!=EOF&&(m||n)){
        ans=0;
        memset(f,0,sizeof(f));
        f[0]=1;
        for(i=0;i


你可能感兴趣的:(动态规划,---------背包)