动态规划--摆花(二维dp)

复制代码
#include <iostream>
using namespace std;
//dp[i][j]表示第i种花位置,第j个位置为止
long long int dp[120][120];
long long int a[160];
int main()
{
int n,m;
cin>>n>>m;//n种花m盆
for(int i=1;i<=n;i++){
  cin>>a[i];
}
dp[0][0]=1;
for(int i=1;i<=n;i++ ){
  for(int j=0;j<=m;j++){
    for(int k=0;k<=j&&k<=a[i];k++){
      dp[i][j]=(dp[i][j]+dp[i-1][j-k])%(1000007);
    }
  }
}
cout<<dp[n][m];
  // 请在此输入您的代码
  return 0;
}
复制代码

方法:二维动态规划

思路是:

利用一个数组dp[i][j]表示到第i种花第j个位置为止

花种的下标从1开始

dp[0][0]=1     -->到第0种花第0个位置初始化为1

核心代码:

for(int i=1;i<=n;i++ ){
  for(int j=0;j<=m;j++){
    for(int k=0;k<=j&&k<=a[i];k++){
      dp[i][j]=(dp[i][j]+dp[i-1][j-k])%(1000007);
    }
  }
}
花种的下标为1
遍历n种花,j个位置0~m(因为初始化dp[0][0]为1,
dp[i-1][j-k]下标从[0][0]开始

 

posted @   Annaprincess  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示