zoukankan      html  css  js  c++  java
  • [USACO]A GAME (博弈+dp)

    题意:从数列左右两边轮流取数,问你最优解的结果

    解题思路:dp,  dp[i][j] = sum[i][j] - min(dp[i][j-1],dp[i+1][j]);

    解题代码:

     1 // File Name: gam3.c
     2 // Author: darkdream
     3 // Created Time: 2014年04月15日 星期二 19时49分52秒
     4 /*
     5 ID: dream.y1
     6 PROG: game1
     7 LANG: C++
     8 */
     9 #include<stdio.h>
    10 #include<string.h>
    11 #include<stdlib.h>
    12 #include<time.h>
    13 #include<math.h>
    14 #include<limits.h>
    15 int sum[300][300];
    16 int dp[300][300];
    17 int min(int a, int b)
    18 {
    19    return b > a ?a:b;
    20 }
    21 int main(){
    22 
    23    freopen("game1.in","r",stdin);
    24    freopen("game1.out","w",stdout);
    25    int n ; 
    26    scanf("%d",&n);
    27    int a[300];
    28    memset(sum,0,sizeof(sum));
    29    for(int i = 1;i <= n;i ++)
    30    {
    31        scanf("%d",&a[i]);
    32        for(int s = i ;s >= 1; s--)
    33        for(int j = i ;j <= n; j ++)
    34        {
    35          sum[s][j] += a[i];
    36        }
    37    }
    38    for(int i = n;i >= 1;i --)
    39    {
    40       for(int j = i; j <= n; j ++)
    41           dp[i][j] = sum[i][j] - min(dp[i][j-1],dp[i+1][j]);
    42    }
    43    printf("%d %d
    ",dp[1][n],sum[1][n] - dp[1][n]);
    44 return 0 ;
    45 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    UVA10763交换学生
    UVA10763交换学生
    UVA10391复合词
    UVA10391复合词
    UVA10125和集
    UVA10125和集
    POJ3762 时间段用k次
    POJ3762 时间段用k次
    Win64 驱动内核编程-11.回调监控进线程句柄操作
    Win64 驱动内核编程-11.回调监控进线程句柄操作
  • 原文地址:https://www.cnblogs.com/zyue/p/3667202.html
Copyright © 2011-2022 走看看