9.22总结

今天上午是考试。。
\(T1\) 购物
贪心,然而我并没有想出来,写了个错误的时间复杂度极高的贪心,水了40分。
如果可选面值里没有\(1\),显然是无解的,否则一定有解。
定义一个变量\(sum\)表示当前已经能拼出的最大面额,初始为\(0\)
然后

while(sum < x){
    for(int i = n; i; --i)
        if(sum + 1 >= a[i]){
          sum += a[i];
          break;
        }
        ++ans;
}

如果当前拼不出下一个数,就找到最大的小于等于下一个数的面额\(a[i]\),那么显然\(sum+a[i]\)以内都是可以拼出了的,因为\(sum\)以内是已经确定可以拼出的了,所以\(a[i]+1,a[i]+2,...,a[i]+sum\)都是可以拼出的了。

\(T2\) 养猪
并没有想到这是一个背包。。仍然贪心乱搞,不记得多少分了。
如果体重不会减少,这显然就是个裸的\(01\)背包,但这里体重会减少,也就是说每件物品的价值本身恒定不变的。

猜你喜欢

转载自www.cnblogs.com/Qihoo360/p/9690891.html