背包,动态规划
对于每一个数据,都可以进行调高或者调低
貌似这个题很简单的样子
如果大暴力会怎么
我们设f[i][[j]为i首歌能达到的音量为j,能为1,不能为0
我们只需要枚举最大的f[n][i],从后往前找到一个就是
就是我们要找的答案
动态规划的精髓我还是没有悟透澈
#include#include #include #include #include using namespace std; int n,beginvoid,maxvoid; int c[60],f[60][1010]; int main() { cin>>n>>beginvoid>>maxvoid; for(int i=1;i<=n;i++) { cin>>c[i]; } f[0][beginvoid]=1; for(int i=1;i<=n;i++) { for(int j=maxvoid;j>=0;j--)//从后往前 { if(f[i-1][j]&&j+c[i]<=maxvoid)//最大音量 且能达到这个音量 f[i][j+c[i]]=1; if(f[i-1][j]&&j-c[i]>=0)//最小音量 f[i][j-c[i]]=1; } } for(int i=maxvoid;i>=0;i--) { if(f[n][i]==1) { cout< 暑期编程PK赛 得CSDN机械键盘等精美礼品!



