zoukankan      html  css  js  c++  java
  • UVA 624 CD

    这道背包题很基础,要学习一下dp输出,。

    代码如下:

    #include<stdio.h>
    #include<string.h>
    #define MAXN 10000
    int tap, cdnum, num[25],f[25][MAXN],p[25][MAXN];
    void print(int i, int j)
    {
    if(i == 0)
    return;
    print(i - 1, p[i][j]);
    if(p[i][j] < j)
    printf("%d ", num[i]);
    }
    void solve()
    {
    memset(p,0,sizeof(p));
    memset(f,0,sizeof(f));
    for(int i = 1; i <= cdnum; i ++)
    for(int j = 0; j <= tap; j ++)
    {
    f[i][j] = f[i-1][j];
    p[i][j] = j;
    if(j>=num[i]&&f[i-1][j-num[i]]+num[i] > f[i][j])
    {
    f[i][j] = f[i-1][j-num[i]]+num[i]; p[i][j] = j-num[i];
    }
    }
    print(cdnum,tap);
    printf("sum:%d\n",f[cdnum][tap]);
    }
    void input()
    {
    while(scanf("%d%d",&tap, &cdnum) == 2)
    {
    for(int i = 1; i <= cdnum; i ++)
    scanf("%d",&num[i]);
    solve();
    }
    }
    int main()
    {
    input();
    return 0;
    }



  • 相关阅读:
    局部类
    内部类
    程序的异常
    四种修饰符
    接口之间的多继承
    多态
    继承父类并实现多个接口
    接口内容小结
    接口的静态方法和私有方法
    顺序栈与链式栈
  • 原文地址:https://www.cnblogs.com/yuzhaoxin/p/2405358.html
Copyright © 2011-2022 走看看