本文共 1110 字,大约阅读时间需要 3 分钟。
用dp[i][j]表示前i行。第i行选第j种状态时的最优解,
首先找出全部本行不冲突的状态(即这一行中没有相邻的情况),存入state数组
计算出第i行取第j种状态时可得到的数值stn[i][j]
那么dp[i][j]=max{dp[i][j],dp[i-1][k]+stn[i][j]} (k表示第i-1行取第k种状态
终于答案即为dp[n][j]中的最大值。
代码:
#include#include #include using namespace std;const int hpn=18000;int state[hpn],stn[25][hpn],dp[25][hpn];//dp[i][j]:前i行,第i行选第j种状态时的最优解int mst,map[25][25];//第i行选第j种状态时的值inline int bet(int x,int y){ if(x>y) return x; return y;}void find_all_state(int n){ memset(state,0,sizeof(state)); mst=0;//最多有多少种状态 int lin=(1< >n) { if(n==0) { cout<<0<
版权声明:本文博主原创文章,博客,未经同意不得转载。
本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4874332.html,如需转载请自行联系原作者