COCI 2006 竞赛 #1 债券任务说明
COCI 2006 Contest#1 Bond task explanation
任务 : http://hsin.hr/coci/archive/2006_2007/contest1_tasks.pdf
我阅读了解决方案,但我不明白此处显示的任何位操作:
/*
Croatian Open Competition in Informatics 2006/2007
Contest 1 - Task BOND
Programming language C++
*/
#include <cstdio>
using namespace std;
int n;
double prob[21][21];
char vec_rijesio[1<<21];
double memo[1<<21];
double rijesi( int d, int s ) {
if ( d == n )
return 1.0;
if ( vec_rijesio[s] ) return memo[s];
vec_rijesio[s] = 1;
double &ret = memo[s];
ret = 0.0;
for ( int i=0; i<n; ++i )
if ( ( s & (1<<i) ) == 0 ) {
double tmp = prob[d][i] * rijesi(d + 1, s|(1<<i));
if ( tmp > ret ) ret = tmp;
}
return ret;
}
int main() {
scanf( "%d", &n );
for ( int i=0; i<n; ++i )
for ( int j=0; j<n; ++j ) {
int x;
scanf( "%d", &x );
prob[i][j] = x / 100.0;
}
double ret = rijesi( 0, 0 );
printf( "%.6fn", ret*100.0 );
return 0;
}
有人可以为我解释代码吗?1. "1<<21"是什么意思?2. 里杰西()内部的for循环发生了什么?谢谢。
- 1<<21 表示 2^21 使用按位左移操作。
- 该算法基本上是带有记忆的蛮力,它尝试为给定的吉米债券分配每个任务并检查 结果概率并评估其中的最大值。
相关文章:
- 当使用通配符和null指针调用函数时,对输出的说明
- 有没有任务栏API可以立即应用注册表更改
- 关于C++中具有多重继承"this"指针的说明
- 如何创建线程序列以按照启动顺序执行任务?
- 16 位到 10 位转换代码说明
- C++一个线程如何正确通信其任务已完成?
- 在线程之间拆分任务总是值得的吗?
- 递归求和任务的错误答案
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- C++ 任务流库入门
- 编译器指出结构和 int 说明的错误 2059
- 随机数生成函数说明
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 赋值到类型和空大括号. 语法说明
- C++ switch 语句:对案例进行分组,并针对每个案例给出特定的说明
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 编写一个读取五个整数并执行一些任务的C++程序
- COCI 2006 竞赛 #1 债券任务说明