zoukankan      html  css  js  c++  java
  • cf731E

    题意:一个游戏,由n张贴纸组成。贴纸排成一排,并且纸条上标有数字,玩家轮流揭下m张从左到右连续的纸条(m大等2),揭下后玩家得分累加这些纸条的sum,并且在剩下纸条最左边贴上新的纸条,数值为揭下纸条的sum。最后只剩一张纸条时游戏结束。每个玩家的策略是使敌我分差尽可能大。求这个分差。

    这道题是那一场最难的题,交的人最少,然而代码只有几行(一个for循环搞定

    题解引入了一个“zero-sum game”来阐述这一类游戏,并且说这一类游戏通常用dp解(%%%

    我们发现每个状态只跟我们已经取走了多少张纸条有关,我们设状态dp[i]表示已经取走i个纸条,一开始分差为0的状态,装的值为这种状态下最大分差

    状态转移为dp[i]=max(sum[j]-dp[j])    i<j<=n

    推的时候维护最大值,O(n)草翻这题(%%%%

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define N 200005
     4 int n,s[N],dp[N],maxx;
     5 int main(){
     6     scanf("%d",&n); for(int a,i=1;i<=n;i++) scanf("%d",&a),s[i]=s[i-1]+a;
     7     maxx=s[n];
     8     for(int i=n-1;i>=1;i--)
     9     dp[i]=maxx,maxx=max(maxx,s[i]-dp[i]);
    10     printf("%d
    ",dp[1]);
    11     return 0;
    12 }
  • 相关阅读:
    vue中handsontable 使用
    vue项目在APP禁止页面缩放
    SuperAgent使用文档
    echart 图表自定义样式
    vue router-link子级返回父级页面
    浏览器的多线程
    gzip压缩
    清除浮动的方法
    vue-router的hash和history模式的区别
    Docker镜像+nginx 部署 vue 项目
  • 原文地址:https://www.cnblogs.com/enigma-aw/p/5997497.html
Copyright © 2011-2022 走看看