思路:直接引用论文的话。

暂时先不考虑“使剩下的物品都放不下”的条件,那就是求 0-1 背包
的所有可行方案。
用 Fi[j]表示前 i 件物品中选若干件总体积为 j 的方案数,初始为 F0[0]=1,转移
方程是:
Fi[j] = Fi-1[j] (Vi>j)
Fi[j] = Fi-1[j] + Fi-1[j-Vi](j>=Vi)
 
显然这个算法的效率是 O(n*C)的,它计算了所有装放背包的方案数。
 
现在考虑“使剩下的物品都放不进去”的条件,如果剩下的物品中体
积最小为 v,那么方案数就是 sum{ Fn[j] }(C>=j>C-v)。前提是我们事先确定
了剩下中体积最小的是哪个。
对体积排序后,下一步就是枚举 i 作为剩余物品中体积最小的一件。对
于所有 s<i 的物品必须都要放入背包,对于 i 则不能放入背包,对于 s>i 的
物品做 0-1背包可行方案的统计,将sum{ Fn[j] }(C>=j>C-Vi)累加到 ans。
由于每次都需要对 n-i 件物品做统计,一共统计 n次,效率是 O(n2
*C)。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define Maxn 4000
using namespace std;
int v[Maxn],dp[10100],ans,Min,Sum;
int main()
{int t,n,m,i,j,Case=0;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);Sum=0;Min=0x7fffffff;for(i=1;i<=n;i++){scanf("%d",v+i);Min=min(Min,v[i]);Sum+=v[i];}ans=0;int sum=0,f=0,k;sort(v+1,v+1+n);for(i=1;i<=n;i++){memset(dp,0,sizeof(dp));dp[sum]=1;for(j=i+1;j<=n;j++)for(k=m;k>=sum+v[j];k--)dp[k]=dp[k]+dp[k-v[j]];for(j=m;j>=m-v[i]+1;j--)if(j>=sum) ans+=dp[j];sum+=v[i];}if(Sum<=m)printf("%d 1\n",++Case);elseif(Min>m)printf("%d 0\n",++Case);elseprintf("%d %d\n",++Case,ans);}return 0;
}

转载于:https://www.cnblogs.com/wangfang20/p/3234503.html

hdu 3093 动态规划相关推荐

  1. HDU OJ 动态规划46题解析

    Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955  背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢 ...

  2. hdu 3819动态规划

    其实这题算动态规划有点牵强,因为它最大的难点和突破点在于把问题进行转化.我的做法是,先数出字符串的总数total和'A'的数目anum,然后只要在字符串中找出长度为anum的连续一段,它的'A'数最多 ...

  3. FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:现给出老鼠的体重与速度,要求你找出符合要求的最长子序列.       要求是 W[m[1]] < ...

  4. hdu 4055 hdu 4489 动态规划

    hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: 1 #include<cstdio> 2 #include<cstring&g ...

  5. hdu 5234 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=5234 1 1 2 //n,m,k(1--100) 3 2 3 100 1 2 3 4 5 6 Sample Ou ...

  6. hdu 1421 动态规划

    题意: 有n件物品,从中选出2*k件,使得这k组物品,每组中两件物品重量之差的平方的和最小 题解: 先对n个物品排序,尽量选择与之相邻的一个物品使其配对, dp[i][j]表示在前j个物品里选i对出来 ...

  7. hdu 3199 动态规划

    f[0]=1; 动规方程  f[i]=min(p1*f[x1],p2*f[x2],p3*f[x3]); 这题用long long 竟然WA #include<cstdio> #includ ...

  8. HDU 3091(动态规划-状态压缩)

    问题描述: One day , Partychen gets several beads , he wants to make these beads a necklace . But not eve ...

  9. hdu 2069 动态规划_所有硬币组合

    文章目录 前言 一.题目 二.解决一波 1.不完全解决方案分析 2.不完全解决方案代码 3.完全解决方案分析 4.完全解决方案代码 前言 又双叒是一道硬币问题,别问,问就是硬币,安排一波~ 一.题目 ...

最新文章

  1. python tk messagebox_tkMessageBox
  2. c++同时读取文本_VBA专题08:使用VBA操作文本文件
  3. Linux中常用C/C++一些头文件的作用
  4. activemq网络桥接_ActiveMQ –经纪人网络解释
  5. JPA – Hibernate –包级别的类型映射
  6. mysql忽略表名大小写_Mysql 表名忽略大小写-连接字符集随笔记录
  7. mysql8.0.21.0 安装
  8. python的设计哲学是优雅明确简单_Python简单教程
  9. java类方法不写权限就时default_Day11_final、权限、内部类
  10. CSS3属性选择器(CSS3)
  11. mac怎么给python下载库_关于macos:在Python中安装库
  12. 智慧警务三维PGIS及一标三实采集、展示平台
  13. nmds与mds的区别_帮研网—科研共享平台——PCA、PCoA和NMDS有什么区别?
  14. Pr_cc 学习笔记(二)鬼畜剪辑
  15. python单机考试答题系统如何制作_在线答题系统是如何创建试卷的?
  16. 计算机防勒索病毒需求分析
  17. String的空校验
  18. 软件工程-软件开发的工程思维
  19. 中国甜味剂粉市场趋势报告、技术动态创新及市场预测
  20. 帆软报表入门操作(一)

热门文章

  1. asio c++20 协程在windows下和linux下设定
  2. opencv copyto给图片加logo
  3. c++ 使用正则匹配url
  4. python manager模块_Python 并发模块
  5. python成绩统计_python统计考试成绩排名
  6. cmd命令大全/cmd命令提示符大全
  7. 【java】序列化:ProtoBuf 与 JSON 的比较
  8. 【算法】剑指 Offer 04. 二维数组中的查找 【重刷】
  9. mac下Python2运行SparkSQL
  10. Maven : Maven和jenkins报错 ClassNotFoundException : org.slf4j.Logger