• POJ 3230 【DP】


    题意:

    某货旅行,在n个城市呆m天。

    给出从第i个城市到第j个城市的路费,或者留在某个城市的生活费。

    给出在第i天在第j个城市的收益。

    可以在城市之间任意穿梭逗留没有其他特殊要求。

    求收益最大是多少。

    思路:

    dp[i][j]代表这货在第i天在第j个城市的最大收益。

    然后状态转移方程是dp[i][j]=max(dp[i-1][1..n]+枚举目标城市计算收益)【这里少写了目标城市的那层循环,一共三层循环】

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int inf=0x3f3f3f3f;
    int n,m;
    int take[105][105];
    int give[105][105];
    int dp[105][105];
    int main()
    {
        scanf("%d%d",&n,&m);
        while(n||m)
        {
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    scanf("%d",&take[i][j]);
                }
            }
            for(int i=1;i<=m;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    scanf("%d",&give[i][j]);
                }
            }
            for(int i=1;i<=n;i++)
            {
                dp[1][i]=give[1][i]-take[1][i];
            }
            for(int i=2;i<=m;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    int maxn=(-1)*inf;
                    for(int k=1;k<=n;k++)
                    {
                        maxn=max(dp[i-1][k]+give[i][j]-take[k][j],maxn);
                    }
                    dp[i][j]=maxn;
                }
            }
            int ans=(-1)*inf;
            for(int i=1;i<=n;i++)
            {
                ans=max(ans,dp[m][i]);
            }
            printf("%d
    ",ans);
            scanf("%d%d",&n,&m);
        }
    }
  • 相关阅读:
    combobox获取dataset部分数据的方法
    vs2008设置Jquery自动感知方法
    iOS7 初体验
    数据采集[即与 WEB 相关的功能函数]
    javascript 时间倒计时效果
    有进度条圆周率计算
    python科学计算库
    python随笔
    jieba库
    数据分析模块pandas
  • 原文地址:https://www.cnblogs.com/tun117/p/4905641.html
Copyright © 2020-2023  润新知