zoukankan      html  css  js  c++  java
  • 每天手写一遍01背包

    题目链接:https://www.acwing.com/problem/content/2/
    01背包,一维更新,更新时要从大到小枚举
    状态转移方程:f[j] = max( f[j] , f[j-v] + w] );
    需要从大到小枚举的原因是,为了使f[j-v]是i-1的状态而不是i的状态。因为v>0,从大到小更新的话,那么f[j-v]一定还没有更新到,所以是i-1的状态。

    2021年11月04日

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1001;
    
    int n,m;
    int f[N];
    
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    } 
    

    2021年11月05日

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1001;
    int f[N];
    int n,m;
    
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    2021年11月06日

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1001;
    int f[N];
    int n,m;
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    2021年11月07日

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1001;
    int n,m;
    int f[N];
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    2021年11月08日

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1001;
    int n,m;
    int f[N];
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    2021年11月09日

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1001;
    int f[N];
    int n,m;
    int main(void)
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		int v,w;
    		cin>>v>>w;
    		for(int j=m;j>=v;j--)
    			f[j]=max(f[j],f[j-v]+w);
    	}
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    我已经闭着眼睛都能写出来了,以后不想写了。

  • 相关阅读:
    yum安装Mysql
    在Centos上安装xtrabackup,对Mysql做备份
    Linux下使用yum安装Mysql之后,无法登陆mysql
    手动产生replication中的系统SP
    MySQL全面瓦解1:安装部署与准备
    开发笔记:PDF生成文字和图片水印
    调试与优化:一次数据中心看板 T+1 改 T+0 优化过程
    MySQL:SELECT COUNT 小结
    系统架构设计:平滑发布和ABTesting
    linux /dev/mapper/centos-root目录莫名其妙被占满
  • 原文地址:https://www.cnblogs.com/longwind7/p/15509288.html
Copyright © 2011-2022 走看看