qq_39423172 2021-07-04 14:13 采纳率: 66.7%
浏览 25

HELP!动态规划求解

约翰有N(1<=N<-40)只奶牛,每只奶牛的产奶量ME(1<-Mi<-100)都不一定一样。约翰想从她们中挑出2部
分,使得每部分的产奶量之和相等,并且这个和要尽可能的大。但是这是一项复杂的操作。

输入
第一行一个数N表示奶牛的个数;后面的N行每行一个数字表示奶牛的产奶量。

输出仅一行,每部分产奶量的最大值。
输入例子:
6
1
2
39
6
10
7
输出:13

  • 写回答

1条回答 默认 最新

  • 答主 2023-02-13 21:13
    关注

    如果您想实现这个问题的代码,可以使用背包问题的思路。

    您可以将每一个奶牛看作是一件物品,物品的价值为该奶牛的产奶量,物品的重量为该奶牛的产奶量,背包的容量为奶牛数量总和的一半。

    然后,您可以使用01背包问题的代码来求出最大的价值,这就是每一部分的最大产奶量。

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 45;
    int n,m,a[N];
    int f[N][10005];
    int main() {
        cin>>n;
        m=0;
        for (int i=1;i<=n;i++) {
            cin>>a[i];
            m+=a[i];
        }
        memset(f,0,sizeof f);
        f[0][0]=1;
        for (int i=1;i<=n;i++) {
            for (int j=m/2;j>=0;j--) {
                for (int k=0;k<=j&&k<=a[i];k++) {
                    f[j][i]=max(f[j][i],f[j-k][i-1]);
                }
            }
        }
        int ans=0;
        for (int i=0;i<=m/2;i++) {
            if (f[i][n]) {
                ans=m-2*i;
                break;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 专家修改了标签 1月19日

悬赏问题

  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算