dp算法总结

dp算法总结01 背包给你 n 种物品每种物品有一件和一个容量为 m 的背包然后给你每种物品的体积和价值求背包所能容下的最大价值样例输入样例输出 5 程序代码 include lt stdio h gt include lt string h gt include lt algorithm gt usingnamespa intv

01背包

样例输入

样例输出

5

程序代码:

#include 
  
    #include 
   
     #include 
    
      using namespace std; int v[110],w[110],dp[110]; int main() { int i,j,n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]); for(i=1;i<=n;i++) for(j=m;j>=v[i];j--) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("%d\n",dp[m]); } return 0; } 
     
    
  

完全背包

样例输入

样例输出

6

程序代码:

#include 
  
    #include 
   
     #include 
    
      using namespace std; int v[110],w[110],dp[110]; int main() { int n,m,i,j; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]); for(i=1;i<=n;i++) for(j=v[i];j<=m;j++) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("%d\n",dp[m]); } return 0; } 
     
    
  

多重背包

样例输入

样例输出

程序代码:

#include 
  
    #include 
   
     #include 
    
      using namespace std; int v[110],w[110],c[110],dp[110]; int main() { int n,m,i,j,k; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) scanf("%d%d%d",&v[i],&w[i],&c[i]); for(i=1;i<=n;i++) for(j=1;j<=c[i];j++) for(k=m;k>=v[i];k--) dp[k]=max(dp[k],dp[k-v[i]]+w[i]); printf("%d\n",dp[m]); } return 0; } 
     
    
  

二维背包

给你n,m,k,s分别表示完成升级还需的经验值,保留的忍耐度,怪的种数和数量,然后是a,b表示杀一个怪给的经验值和消耗的忍耐度,若能完成升级输出剩余的最大忍耐度,否则输出-1

样例输入

样例输出

程序代码:

把每种怪的各个数量都跑一遍:

#include 
  
    #include 
   
     using namespace std; #include 
    
      int a[110],b[110],dp[110][110]; int main() { int i,j,l,n,m,s,k,sum; while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF) { sum=-1; memset(dp,0,sizeof(dp)); for(i=1;i<=k;i++) scanf("%d%d",&a[i],&b[i]); for(i=1;i<=k;i++)//怪的种类,把每种怪的各个数量都跑一遍 for(j=1;j<=s;j++)//怪的数量 for(l=b[i];l<=m;l++)//忍耐度 dp[j][l]=max(dp[j][l],dp[j-1][l-b[i]]+a[i]); for(i=1;i<=m;i++) if(dp[s][i]>=n)//上限为s忍耐度为i时所获得的经验值 { sum=m-i; break; } printf("%d\n",sum); } return 0; } 
     
    
  

把每个怪的各个种类都跑一遍:

#include 
  
    #include 
   
     using namespace std; #include 
    
      int a[110],b[110],dp[110][110]; int main() { int i,j,l,n,m,s,k,sum; while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF) { sum=-1; memset(dp,0,sizeof(dp)); for(i=1;i<=k;i++) scanf("%d%d",&a[i],&b[i]); for(j=1;j<=s;j++)//怪的数量,把每个怪的各个种类都跑一遍 for(i=1;i<=k;i++)//怪的种类,把每种怪都跑一遍 for(l=b[i];l<=m;l++)//忍耐度 dp[j][l]=max(dp[j][l],dp[j-1][l-b[i]]+a[i]); for(i=1;i<=m;i++) if(dp[s][i]>=n) { sum=m-i; break; } printf("%d\n",sum); } return 0; } 
     
    
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218163.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:54
下一篇 2026年3月18日 上午7:54


相关推荐

  • Java编程语言简单常用的输入输出格式

    Java编程语言简单常用的输入输出格式Java语言和C语言的输入输出不同。C语言直接使用scanf()函数进行输入,使用printf()函数进行输出。而在Java中,所谓的函数有了一个新的名词,叫做方法。输入输出方法并不能想C语言那样可以默认直接使用。在使用前需要进行import进行类的导入,然后再进行方法的调用。具体实现,我们可以结合一段简单的代码来解释说明。源码如下:importjava.util.Scanner;publ…

    2022年7月8日
    22
  • 为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC;

    为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC; IP可以分为PublicIP和PrivateIP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有PublicIP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的PublicIP。你有没有发现,你每次使用ipconfig查到的地址,要么就是172….

    2022年6月6日
    130
  • Tps是什么_PHP接口

    Tps是什么_PHP接口tps是啥?TPS,为Transactionprocessingsystems的缩写,是一个事务处理系统,又称为电子数据处理系统(electronicdataprocessingsystem,EDPS),它是指面向企业最底层的管理系统,对企业日常运作所产生的事务信息进行处理。特点:1、保持应用程序的完整性任何应用程序的关键是要确保它所执行的所有操作都是正确的,如果应用程序仅仅是部分地完…

    2022年10月9日
    2
  • 成长之路——InfoQ视频心得笔记[通俗易懂]

    这期是普元信息的主任架构师,顾伟! 视频地址: http://mp.weixin.qq.com/s/0KE_CCU3cWwzvr7D5ENtsQ少年,在路上!不卑不亢!!!1:换维思考 墨菲定律:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择。彼得定律:向上爬的定律!错误和面对压力方面的表现!犯错:积累沉淀,不要犯相同的错误两次!2:人

    2022年2月25日
    38
  • spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册bean

    spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册beanpublicclassPerson{ privateStringname; privateintage; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){…

    2025年7月30日
    6
  • [大模型]DeepSeek-7B-chat WebDemo 部署

    [大模型]DeepSeek-7B-chat WebDemo 部署

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号