ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Balance--用动态规划记录状态的非最优解问题

2022-01-25 19:03:58  阅读:126  来源: 互联网

标签:25 include 15 -- int 枚举 最优 Balance dp


均衡

描述:

吉格尔有一种奇怪的“平衡”,他想保持平衡。实际上,该设备不同于任何其他普通天平。

它订购了两条重量可以忽略不计的手臂,每条手臂的长度为15。一些钩子连接到这些手臂上,Gigel想挂起他收集的G重量(1<=G<=20)中的一些重量,因为知道这些重量在1范围内有不同的值。。25.Gigel可以放下任何钩子的任何重量,但他必须使用所有重量。

最后,Gigel利用在全国信息学奥林匹克运动会上获得的经验,成功地平衡了设备。现在他想知道该设备可以通过多少种方式实现平衡。

 

了解挂钩的重新分配和重量设置,编写一个程序,计算平衡装置的可能性数量。

保证在评估时,每个测试用例至少存在一个解决方案。

输入:

输入具有以下结构:

•第一行包含数字C(2<=C<=20)和数字G(2<=G<=20);

•下一行包含-15范围内的C整数(这些数字也不同,并按升序排序)。。15代表吊钩的重新分配;每个数字代表相对于X轴上天平中心的位置(当未连接砝码时,装置平衡并与X轴对齐;距离的绝对值表示吊钩与平衡中心之间的距离,数字符号确定吊钩连接的天平臂:“-”表示左臂,“+”表示右臂);

•下一行有G个自然的、不同的、按升序排列的数字,范围为1。。25表示权重值。

输出:

输出包含数字M,代表平衡平衡的可能性数量。

样例输入:

2 4

-2 3

3 4 5 8

复制

样例输出:

2

大佬的讲解博客:https://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122629.html

这道题最让我没想到的是居然可以在不是求最优解的题目中用动态规划;

根据大佬的说法好像其使用条件是:

 

dp思路:

每向天平中方一个重物,天平的状态就会改变,而这个状态可以由若干前一状态获得。

 

一开始我也想的是枚举,但算一下就知道会超时;然后我傻了,不知所措;

但看了题解才知道用动态规划,我就在想为什么动态规划就比枚举会快这么多呢?动态规划也不是有枚举吗?

可能是结构不同:枚举可能有时在某一部分相同的地方枚举太多次了;

而动态规划却可以保存重复的地方,精确枚举出真正要的地方,且只枚举一次;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 int hookplace[25],weight[25];
 7 int dp[25][15000];
 8 int main()
 9 {
10     int hooknum,weightnum;
11     cin>>hooknum>>weightnum;
12     for (int i=1;i<=hooknum;i++)
13     {
14         cin>>hookplace[i];
15     }
16     for (int j=1;j<=weightnum;j++)
17     {
18         cin>>weight[j];
19     }
20     memset (dp,0,sizeof (dp));
21     dp[0][7500]=1;
22     for (int i=1;i<=weightnum;i++)
23     {
24         for (int j=1;j<=hooknum;j++)
25         {
26             for (int k=0;k<=15000;k++)
27             {
28                 if (dp[i-1][k]!=0)
29                 {
30                     dp[i][k+weight[i]*hookplace[j]]+=dp[i-1][k];
31                 }
32             }
33         }
34     }
35     cout<<dp[weightnum][7500];
36     return 0;
37 }

 

标签:25,include,15,--,int,枚举,最优,Balance,dp
来源: https://www.cnblogs.com/cilinmengye/p/15844200.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有