文章

9

粉丝

289

获赞

4

访问

82.2k

头像
1147-中餐厅(c语言)
P1147 ICPC大学生程序设计竞赛
发布于2021年3月18日 11:00
阅读数 7.2k

分析

这是简单背包问题。这里背包的值只能为0或者1。0代表有 i 个菜,j 的钱时,没有能在 i 个菜中凑出总价为 j 的方案;1反之。

代码

#include <stdio.h>

int main()
{
    int n, k;
    int dp[36][10005] = {0};//定义背包二维数组,并赋初值0;值只能为0或1;0表示无解,1表示有解
    dp[0][0] = 1;//前0个菜中能凑出满足价格为0的方案,所以为1
    int a[36];
    scanf("%d %d", &n, &k);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &a[i]);
    }
    for(int i=1; i<=n; i++)
    {
        for(int j = 0; j <=k; j++)
        {
            if(dp[i-1][j] == 1)//当不算上第i个菜已经有解,则算上第i个菜也有解
                dp[i][j] = 1;
            if(j >= a[i] && dp[i-1][j-a[i]] == 1)//当总价钱能买下第i个菜,且dp[i-1][j-a[i]] == 1
                dp[i][j] = 1;
        }
    }
    if(dp[n][k] == 1)
        printf("yao bu ni bie gan le ba");
    else
        printf("wo bu yao ni jue de,wo yao wo jue de");
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发