- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发现很难理解在 codeforces 上解决这个问题的两个具体实现 link .
我理解这类似于背包问题。但是,当我自己解决它时,我并不知道该算法。我是根据自己对动态规划的理解解决的。我的想法是把色带剩余的长度作为下一个状态。这是我的代码
#include<iostream>
using namespace std;
int main(){
int n,res1=0,res2,x=0;
int a,b,c;
cin >> n >> a >> b >> c;
for(int i=0;i <= n/a; i++){
res2 = -20000;
for(int j=0; j <= (n-(a*i))/b; j++){
x = (n - (a*i) - (b*j));
res2=max(res2,(j + ((x % c) ? -10000 : x/c)));
}
res1=max(res1,i+res2);
}
cout << res1 << endl;
return 0;
实现 1:
1 #include <bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5 int f[4005],n,a,i,j;
6 fill(f+1,f+4005,-1e9);
7 cin>>n;
8 for(;cin>>a;)
9 for(i=a;i<=n;i++)
10 f[i]=max(f[i],f[i-a]+1);
11 cout<<f[n];
12 }
实现 2:
1 #include <bits/stdc++.h>
2 int n, a, b, c, ost;
3 std::bitset<4007> mog;
4 main()
5 {
6 std::cin>>n>>a>>b>>c;
7 mog[0]=1;
8 for (int i=1; i<=n; i++)
9 if ((mog=((mog<<a)|(mog<<b)|(mog<<c)))[n])
10 ost=i;
11 std::cout << ost;
12 }
虽然我理解解决背包问题的一般思路。我不清楚实现 1 中的第 8、9、10 行是如何实现这一点的。具体而言,无论 a、b、c 的输入值如何,内部 for 循环都是针对接收到的相应值 a 遍历数组。
同样,我可以看到实现 2 中的第 8、9、10 行做了同样的事情。但是我完全不知道这段代码是如何工作的。
请帮助我理解这一点。我觉得这两个解决方案有一些我没有看到的隐藏结构。提前致谢。
最佳答案
这是非常简单的动态规划实现。
外层循环只遍历三个值:a
、b
和 c
8 for(;cin>>a;)
内部循环访问数组的每个元素并更新给定色带长度的当前已知最佳切割数。
9 for(i=a;i<=n;i++)
10 f[i]=max(f[i],f[i-a]+1);
我不认为它可以称为动态规划,但技巧很巧妙。
它分配长度等于最大n
的位数组。然后在左边设置一位。这意味着,长度为 0 的色带是有效的解决方案。在每次迭代中,算法将给定数组向左移动 a
、b
和 c
。每个这样的转变的结果都可以看作是色带的新有效尺寸。通过 or
所有 3 个移位的结果,我们在第 i
次切割后得到所有有效尺寸。如果设置了 n
位,我们知道大小为 n
的色带可以被切割 i
次而没有剩余。
n = 10
a = 2
b = 3
c = 5
i=1:
0|0000000001 // mog
0|0000000100 // mog<<a
0|0000001000 // mog<<b
0|0000100000 // mog<<c
0|0000101100 // mog=(mog<<a)|(mog<<b)|(mog<<c)
^ here is a bit checked in 'if' statement '(mog=(...))[n]'
i=2:
0|0000101100 // mog
0|0010110000 // mog<<a
0|0101100000 // mog<<b
1|0110000000 // mog<<c // here we have solution with two pieces of size 5
1|0111110000 // (mog<<a)|(mog<<b)|(mog<<c)
^ now bit set, so we have a solution
我们知道在那一点上恰好有 i
次切割,所以我们设置 ost=i
。但是我们找到了最坏的解决方案,我们必须继续前进,直到我们确定没有更多的解决方案。
最终我们会达到这样的状态:
i=5:
1|1100000000 // mog
1|0000000000 // mog<<a // 5 pieces of size 2
0|0000000000 // mog<<b
0|0000000000 // mog<<c
1|0000000000 // (mog<<a)|(mog<<b)|(mog<<c)
这是最后一次设置位置 n
的位。所以我们将设置 ost=5
并进行更多迭代。
算法使用 n
作为可能切割的上限,但很明显这个界限可以改进。例如 n/min({a,b,c})
就足够了。
关于c++ - 背包问题变体的递归关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460293/
下面的说法正确吗? “人最好的 friend 是狗。” public class Mann { private BestFriend dog; //etc } 最佳答案 我想说这样
我一直在 documentation 中查看 Laravel 4 中的关系我正在尝试解决以下问题。 我的数据库中有一个名为“事件”的表。该表具有各种字段,主要包含与其他表相关的 ID。例如,我有一个“
我的表具有如下关系: 我有相互链接的级联下拉框,即当您选择国家/地区时,该国家/地区下的区域将加载到区域下拉列表中。但现在我想将下拉菜单更改为基于 Ajax 的自动完成文本框。 我的问题是,我应该有多
我正在尝试弄清楚如何构建这个数据库。我之前用过Apple的核心数据就好了,现在我只是在做一个需要MySQL的不同项目。我是 MySQL 的新手,所以请放轻松。 :) 对于这个例子,假设我有三个表,Us
MongoDB 的关系表示多个文档之间在逻辑上的相互联系。 文档间可以通过嵌入和引用来建立联系。 MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多)
您能解释一下 SQL 中“范围”和“分配单元”之间的区别或关系吗? 最佳答案 分配单元基本上只是一组页面。它可以很小(一页)或很大(很多页)。它在 sys.allocation_units 中有一个元
我有一个表 geoLocations,其中包含两列纬度和经度。还有第二个表(让我们将其命名为城市),其中包含每对唯一的纬度和经度对应的城市。 如何使用 PowerPivot 为这种关系建模?创建两个单
我想用 SQLDelight 建模关系,尤其是 一对多关系。 我有 2 张 table :recipe和 ingredient .为简单起见,它们看起来像这样: CREATE TABLE recipe
我是 Neo4J 新手,我有一个带有源和目标 IP 的简单 CSV。我想在具有相同标签的节点之间创建关系。 类似于... source_ip >> ALERTS >> dest_ip,或者相反。 "d
我正在创建一个类图,但我想知道下面显示的两个类之间是否会有任何关联 - 据我了解,对于关联,ClassA 必须有一个 ClassB 的实例,在这种情况下没有但是,它确实需要知道 ClassB 的一个变
是否可以显示其他属性,即“hasTopping”等? 如何在 OWLViz 中做到这一点? 最佳答案 OWLViz 仅 显示类层次结构(断言和推断的类层次结构)。仅使用“is-a”关系进行描述。 OW
public class MainClass { ArrayList mans = new ArrayList(); // I'm filling in this arraylist,
我想知道“多对二”的关系。 child 可以与两个 parent 中的任何一个联系,但不能同时与两个 parent 联系。有什么办法可以加强这一点吗?我也想防止 child 重复条目。 一个真实的例子
我有一个已经创建的Grails插件,旨在支持许多应用程序。该插件具有一个Employee域对象。问题在于,当在主应用程序中使用该应用程序中的域对象时,需要将其引用回Employee对象。因此,我的主应
我有一个类(class)表、类(class)hasMany部分和部分hasMany讲座以及讲座hasMany评论。如果我有评论 ID 并且想知道其类(class)名称,我应该如何在 LectureCo
我有一个模型团队,包含 ID 和名称。所有可能的团队都会被存储。 我的模型游戏有两列 team_1 和 team_2..我需要哪种关系? 我已经测试了很多,但它只适用于一列.. 最佳答案 也许你可以试
我读了很多关于 ICE 或 Corba 等技术中使用的仆人和对象的文章。有很多资源我可以读到这样的东西: 一个仆人可以处理多个对象(为了节省资源)。 一个对象可以由多个仆人处理(为了可靠性)。 有人可
嗨, 我有一个令人沮丧的问题,我在这方面有点生疏。我有两个这样的类(class): class A{ int i; String j ; //Getters and setters} class B
class Employee { private String name; void setName(String n) { name = n; } String getNam
如果您有这样的关系: 员工与其主管员工之间存在多对一关系 员工与其部门的多对一关系 部门与其经理一对一 我会在 Employee 实体中写入: @ManyToOne (cascade=CascadeT
我是一名优秀的程序员,十分优秀!