P1705 爱与愁过火
题目分析:
从题目中不难发现,这道题可以用简单的背包DP来做。
思路:
先是定义状态:可以用
可以得出状态转移方程:
就是把选择与不选择的方案总数相加起来。
代码:
#include<bits/stdc++.h>
using namespace std;
int m, r, n;
int x[35], v;
int f[35][35][35 * 90 + 5], ans;
int main()
{
cin>>m>>r>>n;
f[0][0][0] = 1;
for (int i = 1; i <= m; i++)
cin>>x[i],f[i][0][0] = 1;//定义初始值
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= i; j++)//枚举物品放置的个数
{
for (int k = 1; k <= m * 90; k++)//枚举当前的价格
{
f[i][j][k] = f[i - 1][j][k];//不选择这个菜品
if (k >= x[i]) f[i][j][k] += f[i - 1][j - 1][k - x[i]];//选择与防止越界
}
}
}
for (int j = n + 1; j <= m * 90; j++)//去找大于n的,并累加起来
{
ans += f[m][r][j];
}
cout<<ans;//直接输出
return 0;
}