动态规划入门:热血实战!

___________________________________最好的旅行,是在陌生的地方,发现了一种久违的感动。

1.poj 3624

#include<iostream>
#include<cstring>
using namespace std;

int w[3403],d[3403],dp[12881],n,m;  //注意dp数组的范围要开大!否则的话无法AC!会显示runtime error的!
int main()
{
	memset(dp,0,sizeof(dp)); //dp数组的意义要明确是神木!:在这样总重量的条件下的期望值的最大值!
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>w[i]>>d[i];
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=w[i];j--) 
			dp[j]=max(dp[j],dp[j-w[i]]+d[i]);
	}
	cout<<dp[m]<<endl;
	return 0;
}

2.poj 1141

 0x7FFFFFFF 的二进制表示就是除了首位是 0,其余都是1就是说,这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)

#include<iostream>
#include<cstdio>
#include<string.h>

using namespace std;
#define MAXN 256
char br[MAXN];
int dp[MAXN][MAXN],pos[MAXN][MAXN];
int len;

void print_br(int i,int j)
{
    if(i>j) return;
    if(i==j)
    {
        if(br[i]=='(' || br[j]==')') printf("()");
        else printf("[]");
    }
    else if(pos[i][j]==-1)
    {
        printf("%c",br[i]);
        print_br(i+1,j-1);
        printf("%c",br[j]);
    }
    else
    {
        print_br(i,pos[i][j]);
        print_br(pos[i][j]+1,j);
    }
}

bool match(int i,int j)
{
    if(br[i]=='(' && br[j]==')') return true;
    if(br[i]=='[' && br[j]==']') return true;
    return false;
}

int main()
{
    int i,j,k,mid,t;
    while(gets(br)!=NULL)
    {
        memset(dp,0,sizeof(dp));

        len=strlen(br);
        for(i=0;i<len;i++) dp[i][i]=1;

        for(k=1;k<len;k++)
        {
            for(i=0;i+k<len;i++)
            {
                j=i+k;
                dp[i][j]=0x7fffffff;
                if(match(i,j))
                {
                    dp[i][j]=dp[i+1][j-1];
                    pos[i][j]=-1; //莫失莫忘,先寿永昌! 
                }
                for(mid=i;mid<j;mid++)
                {
                    t=dp[i][mid]+dp[mid+1][j];
                    if(dp[i][j]>t)
                    {
                        dp[i][j]=t;
                        pos[i][j]=mid;
                    }
                }
            }
        }
        print_br(0,len-1);
        printf("
");
    }
    return 0;
}

————————————————————————————————https://blog.csdn.net/non_cease/article/details/6870034

3.https://vjudge.net/contest/316500#problem/C

原文地址:https://www.cnblogs.com/dragondragon/p/11290162.html