zoukankan      html  css  js  c++  java
  • LuoGu P1541 乌龟棋

    题目传送门
    乌龟棋我并不知道他为啥是个绿题0.0
    总之感觉思维含量确实不太高(虽然我弱DP)(毛多弱火,体大弱门,肥胖弱菊,骑士弱梯,入侵弱智,沙华弱Dp)
    总之,设计出来状态这题就很简单了
    设 f[i][j][k][l] 表示第一种卡片用了 i 张,第二种用了 j 张,以此类推就好了(我太懒了啦)
    然后枚举每种卡片,判断满足每种卡片最少用0张,转移就行了!

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #define min(a,b) (a<b?a:b)
    
    using namespace std;
    
    const int M=40;
    const int N=355;
    
    int f[M][M][M][M],n,m;
    int val[N],card[5],x;
    
    int main(){
    	scanf("%d%d",&n,&m);
    	for(register int i=1;i<=n;++i) scanf("%d",&val[i]);
    	for(register int i=1;i<=m;++i) scanf("%d",&x),++card[x];
    	f[0][0][0][0]=val[1];
    	for(register int i=0;i<=card[1];++i){
    		for(register int j=0;j<=card[2];++j){
    			for(register int k=0;k<=card[3];++k){
    				for(register int l=0;l<=card[4];++l){
    					register int step=i+(j<<1)+((k<<1)+k)+(l<<2)+1;
    					if(i!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]+val[step]);
    					if(j!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]+val[step]);
    					if(k!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]+val[step]);
    					if(l!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]+val[step]);
    				}
    			}
    		}
    	}
    	printf("%d
    ",f[card[1]][card[2]][card[3]][card[4]]);
    	return 0;
    }
    
    May you return with a young heart after years of fighting.
  • 相关阅读:
    Thymeleaf
    快速创建springBoot
    多环境的配置
    第一个SpringBoot
    shiro第三天整合jdbc
    shrio 第二天
    Python 算法集合
    张凤强-《工会固定资产管理系统的设计与实现》随笔
    李翔-《营口港资产管理系统设计与实现》随笔
    刘晶-《高校固定资产管理系统的设计与实现》随笔
  • 原文地址:https://www.cnblogs.com/Equinox-Flower/p/9630512.html
Copyright © 2011-2022 走看看