zoukankan      html  css  js  c++  java
  • 洛谷1541(多维dp)

    走格子拿分数,直接弄dp[i]是到了第i格的最大得分可以发现是假的。
    于是此题设f[i][j][k][t]代表四种步伐各用了几次可以得到的最大得分,到达的点可以直接算出来,就好转移了。

    const int maxn = 355;
    int N, M;
    int a[maxn], cnt[4];
    int f[45][45][45][45], ans;
    
    int main() {
    	read(N), read(M);
    	rep(i, 1, N)	read(a[i]);
    	rep(i, 1, M) {
    		int x; read(x);
    		cnt[x - 1]++;
    	}
    
    	mset(f, -1);
    	f[0][0][0][0] = a[1];
    	rep(i, 0, cnt[0])
    	rep(j, 0, cnt[1])
    	rep(k, 0, cnt[2])
    	rep(t, 0, cnt[3]) {
    		int tmp = f[i][j][k][t], arr = i * 1 + j * 2 + k * 3 + t * 4 + 1;
    		if (tmp < 0 || arr > N)	continue;
    		if (arr == N) {
    			ans = max(ans, tmp);
    			continue;
    		}
    		if (i + 1 <= cnt[0] && arr + 1 <= N)	f[i + 1][j][k][t] = max(f[i + 1][j][k][t], tmp + a[arr + 1]);
    		if (j + 1 <= cnt[1] && arr + 2 <= N)	f[i][j + 1][k][t] = max(f[i][j + 1][k][t], tmp + a[arr + 2]);
    		if (k + 1 <= cnt[2] && arr + 3 <= N)	f[i][j][k + 1][t] = max(f[i][j][k + 1][t], tmp + a[arr + 3]);
    		if (t + 1 <= cnt[3] && arr + 4 <= N)	f[i][j][k][t + 1] = max(f[i][j][k][t + 1], tmp + a[arr + 4]);
    	}
    
    	writeln(ans);
    	return 0;
    }
    
  • 相关阅读:
    SQL server 数据库安装
    jmeter接口测试
    jmeter测试之-脚本制作
    HTTP协议
    计算机原理
    Ubuntu 14.04 搭建 LNMP
    pycharm使用技巧
    hihoCoder #1867 GCD
    Mail.Ru Cup 2018 Round 2 Problem C Lucky Days
    C++ Essentials 之 lower_bound 和 upper_bound 的比较函数格式不同
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10767215.html
Copyright © 2011-2022 走看看