整数求和 [简单DP]

整数求和

题意:问从[1,n]中挑若干个数组成m的方案数,保证n,m <=120

思路:

  • 若n>m,dp[n][m]=dp[m-1][m]
  • 若n==m,dp[n][m]=dp[m-n][m]+1
  • 若n<m,考虑n是否在答案中dp[n][m]=dp[n-1][m-n] + dp[n-1][m]

复杂度:O(n*m),其实也可以用滚动数组写,空间上是2*m

#include<bits/stdc++.h>
using namespace std;

int dp[200][200];

int main(){
    memset(dp,0,sizeof dp);
    int i,j;
    scanf("%d%d",&i,&j);
    for(int n=1;n<=i;n++){
        for(int m=1;m<=j;m++){
            if(n>m) dp[n][m]=dp[m][m];
            else if(n==m)   dp[n][m]=dp[m-1][m]+1;
            else    dp[n][m]=dp[n-1][m-n]+dp[n-1][m];
        }
    }
    printf("%d\n",dp[i][j]);

    return 0;
}

 

全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务