• P1541-乌龟棋


     1 #pragma GCC optimize("Ofast")
     2 #include <bits/stdc++.h>
     3 #define maxn 13003
     4 #define _for(i,a,b) for(int i = (a);i < b;i ++)
     5 typedef long long ll;
     6 using namespace std;
     7 
     8 inline ll read()
     9 {
    10     ll ans = 0;
    11     char ch = getchar(), last = ' ';
    12     while(!isdigit(ch)) last = ch, ch = getchar();
    13     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    14     if(last == '-') ans = -ans;
    15     return ans;
    16 }
    17 inline void write(ll x)
    18 {
    19     if(x < 0) x = -x, putchar('-');
    20     if(x >= 10) write(x / 10);
    21     putchar(x % 10 + '0');
    22 }
    23 
    24 int N,M;
    25 int ip[400];
    26 int dp[41][41][41][41];
    27 int num[5];
    28 int main()
    29 {
    30     N = read(),M = read();
    31     _for(i,1,N+1)
    32         ip[i] = read();
    33     
    34     _for(i,1,M+1)
    35         num[read()] ++;
    36     
    37     dp[0][0][0][0] = ip[1];
    38     _for(a,0,num[1]+1)
    39         _for(b,0,num[2]+1)
    40             _for(c,0,num[3]+1)
    41                 _for(d,0,num[4]+1)
    42                 {
    43                     int r = 1+a+2*b+3*c+4*d;
    44                     if(a) dp[a][b][c][d] = max(dp[a][b][c][d],dp[a-1][b][c][d]+ip[r]);
    45                     if(b) dp[a][b][c][d] = max(dp[a][b][c][d],dp[a][b-1][c][d]+ip[r]);
    46                     if(c) dp[a][b][c][d] = max(dp[a][b][c][d],dp[a][b][c-1][d]+ip[r]);
    47                     if(d) dp[a][b][c][d] = max(dp[a][b][c][d],dp[a][b][c][d-1]+ip[r]);
    48                 }
    49     write(dp[num[1]][num[2]][num[3]][num[4]]);
    50     return 0;
    51 }
  • 相关阅读:
    Hibernate
    Redis的学习
    Redis的人门以及使用
    Win32 配置文件用法
    Using virtual lists
    windows log
    Win查询注册表获取CPU与内存参数
    MFC 多线程及线程同步
    使用Custom Draw优雅的实现ListCtrl的重绘
    MFC工具栏设计
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11350648.html
Copyright © 2020-2023  润新知