zoukankan      html  css  js  c++  java
  • TaoSama与煎饼

    1.这DP写得想哭~~~

    2.好不容易想出dp[i][j][k][l]的状态,却把遍历的顺序写反了(我写的是从后向前,那么t[1],t[2],t[3],t[4]中某项为0时,就崩溃了),导致越写越复杂。

    3.orzzzzzzzzz

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 int T,n,m;
     8 int dp[45][45][45][45],c[400],t[5];
     9 
    10 int main()
    11 {    scanf("%d",&T);
    12      while(T--){
    13         scanf("%d%d",&n,&m);
    14         memset(c,0,sizeof(c));
    15         memset(t,0,sizeof(t));
    16         memset(dp,0,sizeof(dp));
    17         for(int i=1;i<=n;i++) scanf("%d",&c[i]);
    18         for(int i=1;i<=m;i++){
    19             int tem;scanf("%d",&tem);
    20             t[tem]++;
    21         }
    22         dp[0][0][0][0]=c[1];
    23         for(int i=0;i<=t[1];i++){
    24             for(int j=0;j<=t[2];j++){
    25                 for(int k=0;k<=t[3];k++){
    26                     for(int l=0;l<=t[4];l++){
    27                         if(i) dp[i][j][k][l]=max(dp[i][j][k][l],c[1+i+j*2+k*3+l*4]+dp[i-1][j][k][l]);
    28                         if(j) dp[i][j][k][l]=max(dp[i][j][k][l],c[1+i+j*2+k*3+l*4]+dp[i][j-1][k][l]);
    29                         if(k) dp[i][j][k][l]=max(dp[i][j][k][l],c[1+i+j*2+k*3+l*4]+dp[i][j][k-1][l]);
    30                         if(l) dp[i][j][k][l]=max(dp[i][j][k][l],c[1+i+j*2+k*3+l*4]+dp[i][j][k][l-1]);
    31                     }
    32                 }
    33             }
    34         }
    35         printf("%d
    ",dp[t[1]][t[2]][t[3]][t[4]]);
    36     }
    37 } 
  • 相关阅读:
    mysql学习笔记-数据库相关操作
    bugku-flag在index里(本地文件包含漏洞+php伪协议的结合应用)
    nmap的指令学习
    雅礼2018-03-11
    两道题,雅礼一题矩阵转置
    2018-03-05 计算鞍点
    多维数组
    TCP拥塞控制
    TCP三次握手和四次挥手
    MySQL事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/6925312.html
Copyright © 2011-2022 走看看