乌龟棋 【多维DP】 Codevs1068
来源:互联网 发布:网络效应多选题答案 编辑:程序博客网 时间:2024/05/23 19:14
因为 N < 40 所以这道题即使多维也不会MLE和TLE
设dp[i1][i2][i3][i4] 是使用了i1张1,i2张2,i3张3,i4张4后能得到的最大分数
需要注意dp[0][0][0][0]要设置为第一个格子的分数,不然会错
下面的代码中因为i1 i2 i3 i4一开始都是0 所以x+=t可以初始化dp[0][0][0][0]为第一个格子的分数
#include <cstdio>#include <algorithm>int n, m, m1, m2, m3, m4, a[360], b[130], dp[41][41][41][41];inline void read(int &x) { x = 0; char c = getchar(); while(c<'0'||c>'9') c = getchar(); while(c>='0'&&c<='9') x = x*10 + c -'0', c = getchar(); return;}int main() { read(n); read(m); for(int i=1; i<=n; i++) read(a[i]); for(int i=1; i<=m; i++){ read(b[i]); if(b[i] == 1) m1++; else if(b[i] == 2) m2++; else if(b[i] == 3) m3++; else if(b[i] == 4) m4++; } for(int i1=0; i1<=m1; i1++) { for(int i2=0; i2<=m2; i2++) { for(int i3=0; i3<=m3; i3++) { for(int i4=0; i4<=m4; i4++) { int &x = dp[i1][i2][i3][i4];//使用引用可以少打点字 int t = a[1+i1+2*i2+3*i3+4*i4]; if(i1 > 0) x = std::max(x, dp[i1-1][i2][i3][i4]); if(i2 > 0) x = std::max(x, dp[i1][i2-1][i3][i4]); if(i3 > 0) x = std::max(x, dp[i1][i2][i3-1][i4]); if(i4 > 0) x = std::max(x, dp[i1][i2][i3][i4-1]); x += t; } } } } printf("%d",dp[m1][m2][m3][m4]); return 0;}
阅读全文
0 0
- 乌龟棋 【多维DP】 Codevs1068
- codevs1068 乌龟棋(DP)
- codevs1068 乌龟棋
- 【基础练习】【背包DP】codevs1068 乌龟棋题解
- 洛谷P1541/CODEVS1068 乌龟棋
- NOIP2010 乌龟棋(多维DP)
- 【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题
- wikioi1068 乌龟棋 dp
- voj1775 乌龟棋 dp
- 【背包dp】【乌龟棋】
- [NOIP2010]乌龟棋(DP)
- 【NOIP2010】乌龟棋 dp
- 【DP】洛谷 P1541 乌龟棋
- [NOIP2010]乌龟棋 四维dp
- ACM 519. [NOIP2010] 乌龟棋(dp)
- NOIP 2010 乌龟棋 DP (COGS 519)
- Codevs_P1068 乌龟棋(DP+背包问题)
- 【dp】NOIP2010提高组乌龟棋
- PAT(Basic Level)_1015_德才论
- Win10 Ubuntu 16.04双系统,Ubuntu无法访问Windows磁盘
- Foreign Exchange
- (2)基础入门:了解扩展体
- 56. Merge Intervals
- 乌龟棋 【多维DP】 Codevs1068
- 基于CentOS的Hadoop和Spark分布式集群搭建过程
- 1105: 判断友好数对(函数专题)
- HDU 2577 How to Type
- Compound Words
- JavaScript动态绑定(向后绑定)
- 2763: [JLOI2011]飞行路线
- 8、样式的继承、应用及优先级
- springmvc数据的格式化及数据校验