zoukankan      html  css  js  c++  java
  • POJ 1293

        裸的01背包.dp[x]只要是bool型记录当前空间是否可用..

        而为了找到用了哪些物品..dp[x]设置为int型..进行记录..


    Program:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<cmath>
    #define oo 1000000007
    #define ll long long
    #define pi acos(-1.0)
    #define MAXN 20005
    using namespace std;
    int M,L,N,w[MAXN],dp[MAXN],ans[MAXN];
    bool used[MAXN];
    int main()
    {
         // freopen("input.txt","r",stdin);   freopen("output.txt","w",stdout);
          int i,j,x,num,sum;
          while (~scanf("%d%d",&M,&L))
          {
                  if (!M && !L) break;
                  scanf("%d",&N);
                  memset(dp,-1,sizeof(dp));
                  sum=0;
                  dp[0]=0;
                  for (i=1;i<=N;i++) scanf("%d",&w[i]);
                  for (i=1;i<=N;i++)
                  {
                         x=w[i];
                         sum+=x;
                         for (j=M-x;j>=0;j--)
                           if (dp[j]!=-1 && dp[j+x]==-1)
                             dp[j+x]=i;
                  }
                  for (;M>=0;M--)
                  if (sum-M<=L && dp[M]!=-1)
                  {
                         x=M;
                         num=0;
                         while (x)
                         {
                              ans[++num]=dp[x];
                              x=x-w[dp[x]];
                         }
                         printf("%d",num);
                         for (i=num;i>=1;i--) printf(" %d",ans[i]);
                         break;
                  }
                  if (M<0) printf("Impossible to distribute");
                  printf("
    ");
          }
          return 0;
    }
    
    



  • 相关阅读:
    Android购物商城
    Android简易计算器
    安卓第四周作业
    第一次安卓作业
    十五周课后习题
    第十三周作业
    十三周上机练习
    第十二周作业
    第十二周练习
    11周上机作业(5.14)
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3190225.html
Copyright © 2011-2022 走看看