• 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.
  • 相关阅读:
    python3 crypto winrandom import error
    Flask-Babel 中文支持(zh-CN和zh-Hans-CN)
    pip 安装psycopg的错误
    Aapache status / apache2ctl status 总是403
    为什么你还在用嵌入式的方式来使用mod_wsgi?
    Git中当add错误的时候怎么办?
    Python 内置彩蛋
    本人AI知识体系导航
    本人SW知识体系导航
    SSH密钥对登录的原理和实践
  • 原文地址:https://www.cnblogs.com/Equinox-Flower/p/9630512.html
Copyright © 2020-2023  润新知