看到这道题目首先想到的是搜索但发现卡牌的使用顺序是不确定的有许多种使用方案,实现很不方便
所以想到了动态规划 ,可以发现使用每张卡牌后的状态是明确的。所以可以根据每种卡牌的使用数进行动归
明显可得动态转移方程:使用1步卡片后:f[i][j][k][p]=max(f[i][j][k][p],f[i-1][j][k][p]+a[当前位置]};
使用2步卡片后:f[i][j][k][p]=max(f[i][j][k][p],f[i][j-1][k][p]+a[当前位置]};
以此类推
f[i][j][k][p]代表使用了i张1步卡片j张2步卡片k张3步卡片p张4步卡片
用数组a[]来储存每个位置上的值
f[0][0][0][0]=a[1];
for(int i=0;i<=t[1];i++)
for(int j=0;j<=t[2];j++)
for(int k=0;k<=t[3];k++)
for(