解题思路:
01背包,价值加个乘法而己




注意事项:





参考代码:

#include<stdio.h>
#include<string.h>
int max(long int a,long int b)
{
    return a>=b?a:b;
}
int main()
{
    long int i,j,n,m,ma=0;
    long int a[30][2],pr[30010];
    scanf("%ld %ld",&n,&m);
    memset(pr,0,sizeof(pr));
    for(i=0;i<m;i++)
    {
        scanf("%ld %ld",&a[i][0],&a[i][1]);
        a[i][1]=a[i][0]*a[i][1];
    }
    for(i=0;i<m;i++)
    {
        for(j=n;j>=a[i][0];j--)
        {
            pr[j]=max(pr[j],pr[j-a[i][0]]+a[i][1]);
        }
    }
    for(i=0;i<=n;i++)
    {
        if(ma<pr[i])
            ma=pr[i];
    }
    printf("%ld",ma);
    return 0;
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

手残 5年前 回复TA
pr[j]=max(pr[j],pr[j-a[i][0]]+a[i][1])
有什么用
emmmm 6年前 回复TA
能加注释么,没看懂..................