2010年noip c++提高组复赛 第二题

针对2010年NOIP比赛中的第二题,本文介绍了一种使用动态规划的解决方案。通过分析卡牌使用后状态,确定动态转移方程,如f[i][j][k][p]=max(f[i][j][k][p], f[i-1][j][k][p]+a[当前位置])等。作者强调理解动态规划状态转移的重要性,并分享了完整的C++代码实现。" 114694459,7776311,CSS样式引入与显示状态详解,"['CSS', 'HTML', '前端开发']
摘要由CSDN通过智能技术生成

这里写图片描述
看到这道题目首先想到的是搜索但发现卡牌的使用顺序是不确定的有许多种使用方案,实现很不方便
所以想到了动态规划 ,可以发现使用每张卡牌后的状态是明确的。所以可以根据每种卡牌的使用数进行动归
明显可得动态转移方程:使用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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值