感觉这种题答都没有题解,而我又想在这里保存一下代码,就写一份题解咯。
【题意】
一共有M个变量。
有一系列的操作,按顺序标为1~N。操作分为三种:
①普通操作:将一个变量加上一个量。
②条件跳转:给出两个量A、B和两个编号P、Q。
如果A<B那么跳到编号为P的操作,否则跳到编号为Q的操作。
③选择跳转:给出两个编号P、Q。在P和Q中任选一个跳过去。
注意以上的“量”可以是常量,也可以是目前某一个变量的值。
如果什么时候跳转到的编号不在1~N之间,则视为退出游戏。
你要给出选择跳转的决策,使退出游戏的时候第一个变量的值尽量的大。
(数据隐藏条件:跳转满足拓扑序)
【Case1和Case2】
C1的决策只有20个,直接DFS一下。
(顺便要写一个比较DJ的读入和模拟器)
发现C2跑了几秒也跑出来了QAQ。动态规划
#include<cstdio>
#include<cstring>
const int V=14,N=35005,A=35008,M=1005;// test4,5,<6>:6005,5005;test7,9,<8,10>:17505,505;
long long a3[50]={// test3 answers in 40 bits each
105025473538,966002026284,29071798794,828015681698,345076144512,7609663648,75572971281,893434105988,55374250029,69357298497,
352188367880,606129394432,114391256076,280284430482,21342331152,71438241792,552864354484,277310738817,292830118913,356817845002,
171866350220,738738866178,124730794401,567011710064,276090593300,146336664705,105370633227,8766641162,554084534088,220354604,
275834439762,689661677592,384430491443,35505128705,362000505380,717277582337,551404199944,28525008900,42180411432,111962951362,
756249821316,104178523169,970685944448,826990151840,550066487844,56014938624,183102753072,498235172866,367371821952,111820754965};
int a4[37]={// test4 answers in 27 bits each
53023363,126569282,96699504,125433988,17903708,69782701,20011427,79325988,34426572,28519852,73662648,88093828,111679748,2720499,
8722643,3446989,98607969,271677,9013658,3140163,39583877,77874946,99252525,50794073,5960927,58906286,79851791,88096402,74645533,
115779693,19405473,127156765,89097393,106777648,37504704,102765283,13775654};
unsigned long long a5[13]={// test5 answers in 64 bits each
2472856109046735176u,14002470006381216419u,9262603746387061448u,6104175549895418148u,7607447720203324760u,
187054435080471040u,5353311602114594057u,164434300413151236u,23615752480527815