积木游戏 vijos
2012-09-22 20:15
288 查看
题目要求“第K堆中任意一块积木的编号要大于第K+1堆中任意一块积木的编号”,为了与后面的保持一致,我们把它改为“小于后面一堆”,这样改动显然不会影响最终的解,接下来就是状态设计了。对于第j快积木,假设当前已经有i堆积木了,那么它有三种决策,不放或另起一堆或放在当前堆的最上面,由题目限制可知,不可能放在第i堆前面的堆中。对于放在当前堆的这一决策,当然还要考虑能否放上去,也就是我们还要知道第i堆最上面放的是哪一块积木以及是哪一面朝上。说到这里状态也就可以写出来了,即(i,j,k,a),k记录编号,a记录面。状态和决策都已经知道了,那么这题也就基本出来了。
#include<iostream> #include<cstdio> using namespace std; struct jimu { int a,b,c; }p[101][3]; int dp[101][101][101][3]; int n,m; inline int max(int a,int b) { return a>b?a:b; } int dfs(int i,int j,int k,int t)//已经有i堆,第j个积木,当前堆顶的积木编号为k,t面朝上(面用0,1,2区分) { if(j>n) { if(i==m) return 0; else//不符合刚好m堆的限制,因此不能算这种情况 return -10000000; } if(dp[i][j][k][t]!=-1) return dp[i][j][k][t]; dp[i][j][k][t]=dfs(i,j+1,k,t);//不放 if(i<m)//另取一堆 { for(int x=0;x<3;x++) dp[i][j][k][t]=max(dp[i][j][k][t],dfs(i+1,j+1,j,x)+p[j][x].c); } for(int x=0;x<3;x++)//放在当前堆 { if(j>k&&p[j][x].a<=p[k][t].a&&p[j][x].b<=p[k][t].b) dp[i][j][k][t]=max(dp[i][j][k][t],dfs(i,j+1,j,x)+p[j][x].c); } return dp[i][j][k][t]; } int main() { int i,j,k; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { scanf("%d%d%d",&p[i][0].a,&p[i][0].b,&p[i][0].c); p[i][1].c=p[i][0].a;p[i][1].a=p[i][0].b;p[i][1].b=p[i][0].c; p[i][2].c=p[i][0].b;p[i][2].a=p[i][0].a;p[i][2].b=p[i][0].c; for(j=0;j<3;j++) if(p[i][j].a>p[i][j].b) swap(p[i][j].a,p[i][j].b); } for(i=0;i<3;i++) p[0][i].a=p[0][i].b=10000; //memset(dp,-1,sizeof(dp)); for(i=0;i<=n;i++) for(j=0;j<=n;j++) for(k=0;k<=n;k++) dp[i][j][k][0]=dp[i][j][k][1]=dp[i][j][k][2]=-1; dfs(1,1,0,0); printf("%d\n",dp[1][1][0][0]); //system("pause"); return 0; }
相关文章推荐
- Vijos 1464积木游戏
- vijos 1240 朴素的网络游戏
- [NOIP2009][vijos1809]三国游戏(贪心)
- 【Vijos】1218 数字游戏
- #bzoj2240#积木游戏(DP? 贪心?)
- vijos P1485 传球游戏
- Vijos P1844(积木大赛-贪心)
- Vijos P1196吃糖果游戏[组合游戏]
- 4000 SSL、vijos||容易的网络游戏(normal)
- NOI 1997 积木游戏(解题报告)
- [Bigint][贪心][模板]vijosp1779国王游戏
- VIJOS-P1134 24点游戏 dfs
- Vijos P1554 硬币游戏(ZJOI2009)题解
- vijos 1218 数字游戏(环形dp)
- Cpp环境【POJ3258】【Usaco2006】【Vijos1329】River Hopscotch跳石游戏
- 【动态规划】Vijos P1218 数字游戏(NOIP2003普及组)
- java 积木游戏
- Vijos 1554题:硬币游戏
- Vijos_1218_数字游戏_(划分型动态规划+环状动态规划)
- vijos 1059 积木城堡【暴力】