动态 规划

DP(Dynamic Programmin)

动态规划可以使用递归但是太过于重复计算,我们可以用一个二维数组将已经推导出的结果保存下来。

1.01背包

w表示重量 v表示价值 i表示第i个物品 j是重量

二维数组的递推式为

dp[i+1][j]={ dp[i]][j]  (j<w[i])(拿不了可以拿前面的)

                { max(dp[i][j],dp[i][j-w[i]]+v[i])  (可以拿但要与同等重量的去比价值)

2.最长公共子序列

s,t分别为两个字符串

dp[i+1][j+1]={ dp[i]][j] +1(s[i]==t[i])相等在前面的基础上加1

={ max(dp[i+1][j],dp[i][j+1]+v[i])不相等,比较加入该字符或者不要该字符那个最长

3完全背包

在01背包上增加了对物品可以拿多次只要在01背包上来一个计数K

dp[i+1][j]={ dp[i]][j]  (j<w[i])(拿不了可以拿前面的)

                { max(dp[i][j],dp[i][j-k*w[i]]+v[i])  (可以拿但要与同等重量的去比价值)

#include <iostream>
#include <algorithm>
using namespace std;
struct  bag
{
    int vi,wi;
};
int biao[10000];
bag a[10000];
int main()
{
   int c,n;
   cin >> c>> n;
   for(int i=0;i<c;i++)
   cin >>a[i].vi>>a[i].wi;
   for(int i=0;i<c;i++)
   {
       for(int j=n;j>=0;j--)
   if(j>=a[i].vi)
   biao[j]=max(biao[j-a[i].vi]+a[i].wi,biao[j]);
   for(int i=0;i<=n;i++)
   cout << biao[i]<<' ';
   cout << endl;
   }
   cout << biao[n];
    
}

 

#include<iostream>
#include<string>
using namespace std;
int dp[1010][1010];
int main()
{
    string s,t;
    int n,m;
    cin >> n>>m;
    cin >>s;
    cin>> t;
   for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
   {
       if(s[i]==t[j])
       dp[i+1][j+1]=dp[i][j]+1;
       else dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
   }
   cout <<dp[n][m];
}

 

#include <iostream>
#include <algorithm>
using namespace std;
struct  bag
{
   int vi,wi,ci;
};
bag a[10010];
long long int biao[30010];
int main()
{
   int n,v;
   cin >> n>>v;
   for(int i=0;i<n;i++)
   cin >>a[i].vi>>a[i].wi>>a[i].ci;
   int cnt ,i,j;
   for( i=0;i<n;i++)
   for(j=v;j>=0;j--)
   { 
       cnt=0;
      while(cnt<=a[i].ci&&j>=a[i].vi*cnt)
       {
           
           biao[j]=max(biao[j-a[i].vi*cnt]+a[i].wi*cnt,biao[j]);
           cnt++;
       }
   }
   cout<<  biao[v];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值