Uva 6430 - Points ...简单DP

原创 2013年12月04日 21:49:50

               题意:

                       有N(N<=10^6)个target排成一列(标号为1~N)..现在要选择一些target..并且告诉对于每个target..其得分的方式..对于选了第i个target得分

                            1、若其左右没有一个target被选择...得ai分

                            2、若其左右中有一个target被选择.,.得bi分

                            3、若其左右中无一个target被选择...得ci分

                       问能得到的最大分数...

               题解:

                       由于影响一个位置的取值分数仅与其右边和做边的点有关..所以可以用dp[i][x][y]代表扫到了第i个..第i个target是否选择了..第i-1个target是否选择了的最大值..

 

Program:

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <string.h>
#define oo 1000000007
#define MAXN 1000500
using namespace std;
int dp[2][2][2],a[MAXN],b[MAXN],c[MAXN];
int turn(int l,int x,int r)
{
       if (!l && !r) return a[x];
       if (l+r==1) return b[x];
       return c[x];
}
int main()
{
       int N,t,i,j,x,k,ans; 
       while (~scanf("%d",&N))
       {
               a[0]=b[0]=c[0]=0;
               for (i=1;i<=N;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
               c[1]=c[N]=-oo;
               if (N==1) b[1]=-oo;
               memset(dp[0],-0x3f,sizeof(dp[0]));
               dp[0][0][0]=0;
               k=ans=0;
               for (t=1;t<=N+1;t++)
               {
                       k=1-k;
                       memset(dp[k],-0x3f,sizeof(dp[k]));
                       for (x=0;x<2;x++)
                         for (i=0;i<2;i++)
                           for (j=0;j<2;j++)
                           {
                                  if (i) //别忘了...
                                       dp[k][i][j]=max(dp[k][i][j],dp[1-k][x][i]+turn(x,t-1,j));
                                    else
                                       dp[k][i][j]=max(dp[k][i][j],dp[1-k][x][i]);
                                  ans=max(ans,dp[k][i][j]);
                           }
               }
               printf("%d\n",ans);

       }
       return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UVA 1025 A Spy in the Metro (简单DP)

#include #define INF 0x3f3f3f3f #define eps 1e-6 typedef long long LL; const double pi = acos(-1.0);...

uva 1169 Robotruck(简单区间dp)

一个二位平面上有n个垃圾,现在用一个机器人去捡起来,且是按照输入顺序捡,放回位于原点处的垃圾桶中,两点之间的距离算曼哈顿距离,机器人的最大承重量为C,求捡完所有垃圾机器人走动的最小距离。 sumdi...

UVa 10780 - How do you add? (简单DP 组合数学 隔板法)

Problem A: How do you add? Larry is very bad at math - he usually uses a calculator, which worked...

UVa 825 - Walking on the Safe Side(简单DP+数据读入)

Square City is a very easy place for people to walk around. The two-way streets run North-South or E...

[简单DP] uva12951 Stock Market

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem...

UVA1626 简单DP

题意输入n个样例,每个样例为包含的字符串,添加最少的字符,使得字符串中的匹配。题解设从i到j的字符串最少需要增加dp[i][j]个字符,如果字符i和字符j匹配,则状态可转移到dp[i+1][j-1]。...

hdu 1421 1159 1087 1160 5366 1257 light OJ 1110 uva 562 简单dp

#include #include #include #include #include #include #include #include #include #include u...

UVA - 116 - Unidirectional TSP (简单DP + 打印路径)

题目传送: UVA - 116 思路:可以定义状态为dp[i][j] 为从第i行第j列开始往后走到第n列(总共n列)的最小值(赋初始值为无穷),且状态方程很好推出来:dp[i][j]...

UVA - 10618(条件复杂的简单dp)

这个dp 没什么可说的,状态很容易想, 只是有两个地方容易出错,就是从当前位置进行转移,合法性的判断(特别注意 当右脚在左面,这这时候左脚是可以tap的)。 第二个,就是计算得分。千万注意啊。 ...

UVA 437 The Tower of Babylon - 简单dp

题目描述](http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19214)分析:因为每种都有无穷多个,所以可以将每个立方体拆成三个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)