zoukankan      html  css  js  c++  java
  • 洛谷P2858 【[USACO06FEB]奶牛零食Treats for the Cows】

    我们可以记录头和尾再加一个卖了的零食数目,如果头超过尾就return 0。

    如果遇到需要重复使用的数,(也就是不为零的d数组)就直接return d[tuo][wei]。

    如果没有,就取卖头一个与最后一个的最大值,并记录下来。

    代码也有注释,具体可以自己看。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[2001],d[2001][2001];
    int dfs(int gong,int tuo,int wei)
    {
    	if(tuo>wei)
    	{
    		return 0;//返回
    	}
    	if(d[tuo][wei])
    	{
    		return d[tuo][wei];//运用记忆化
    	}
    	return d[tuo][wei]=max(dfs(gong+1,tuo+1,wei)+gong*a[tuo],dfs(gong+1,tuo,wei-1)+gong*a[wei]);//运用记忆化
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    	}
    	cout<<dfs(1,1,n)<<endl;//输出
    	return 0;
    }
    
  • 相关阅读:
    c++ primer plus 第六章 课后题答案
    动态创建easyui控件的渲染问题
    晨报
    动态构建easyUI grid
    早起
    周末
    js ajax方式拼接参数
    5个月
    锻炼
    东湖夜色
  • 原文地址:https://www.cnblogs.com/2017gdgzoi44/p/11360802.html
Copyright © 2011-2022 走看看