算法01

今天做的算法题目如下:

#include<iostream>
using namespace std;
int main()
{
    string wen1,wen2;
    cin>>wen1;
    cin>>wen2;
    int a[9],b[9];
    for(int i=0;i<+8;i++)
    {
        a[i]=b[i]=0;
    }
    int a1=8,a2=8;
    for(int i=wen1.length();i>0;i--)
    {
    
        a[a1--]=wen1[i-1]-'0';
      
    }
     for(int i=wen2.length();i>0;i--)
    {
        b[a2--]=wen2[i-1]-'0';
    }
    for(int i=8;i>0;i--)
    {
        int bb=a[i]+b[i];
        a[i]=bb%10;
        a[i-1]=a[i-1]+bb/10;
    }
    bool w=false;
    for(int i=0;i<=8;i++)
    {
        if(a[i]<10&&a[i]!=0)
        {
            w=true;
        }
        if(w)
        {
           cout<<a[i];
        }
    }
}

#include<iostream>
using namespace std;
int main()
{
    int w[1005],v[1005],ok[1005][1005];
    int a,b;
    cin>>a>>b;
    for(int i=1;i<=a;i++)
    {
        cin>>w[i];
        cin>>v[i];
    }
    for(int i=1;i<=a;i++)
    {
        for(int j=1;j<=b;j++)
        {
            if(j<w[i])
            {
                 ok[i][j]=ok[i-1][j];
            }
            else{
                ok[i][j]=max(ok[i-1][j],ok[i-1][j-w[i]]+v[i]);
            }
            
        }
    }
    cout<<ok[a][b];
}

其中V(i-1,j)表示不装,V(i-1,j-w(i))+v(i) 表示装了第i个商品,背包容量减少w(i),但价值增加了v(i);

由此可以得出递推关系式:

  • j<w(i) V(i,j)=V(i-1,j)
  • j>=w(i) V(i,j)=max{V(i-1,j),V(i-1,j-w(i))+v(i)}
原文地址:https://www.cnblogs.com/dazhi151/p/12636686.html