zoukankan      html  css  js  c++  java
  • POJ 3624 Charm Bracelet【01背包】

    解题思路:直接套公式就能做的01背包,

    for(i=1;i<=n;i++)
    {
    	for(v=w[i];v<=m;v++)
         f[i,v]=max(f[i,v],f[i-1,v-w[i]]+d[i]);//只想明白了可以用一维数组来存放包的价值,因为我们需要的只是包的最大价值,不用记录是第几个包的时候,有最大价值,然后v从w[i]到包的总容量循环不明白。
    }
    for(i=1;i<=n;i++)
    {
    	for(v=m;v>=c[i];v--)  //即最开始给定包的总容量(此时包是空的),循环跳出条件是预留出现在正在放入的这个包的体积(这样你可以选择放入或者不放入),然后放下一个包的时候,之前包的总价值也被记录下来了。
    		f[v]=max(f[v],f[v-w[i]]+d[i]);
    }
    
    #include<stdio.h>
    #include<string.h>
    int f[15000],w[3500],d[3500];
    int max(int a,int b)
    {
    	if(a>b)
    		return a;
    	else
    		return b;
    }
    int main()
    {
    	int n,m;
    	int i,v;
    	while(scanf("%d %d",&n,&m)!=EOF)
    	{
    		memset(f,0,sizeof(f));
    		for(i=1;i<=n;i++)
    			scanf("%d %d",&w[i],&d[i]);
    		for(i=1;i<=n;i++)
    		{
    			for(v=m;v>=w[i];v--)
    			{
    				f[v]=max(f[v],f[v-w[i]]+d[i]);
    			}
    		}
    		printf("%d
    ",f[m]);
    	}
    }
    
  • 相关阅读:
    jwt
    mybatis的回顾
    swagger
    MySQl总结
    Java异常
    常用Dos命令
    C++初级项目——机房预约系统
    C++中将数字型字符串转变为int类型的方法
    C++中int *a; int &a; int & *a; int * &a
    #define_CRT_SECURE_NO_WARNINGS的用法
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4134830.html
Copyright © 2011-2022 走看看