1248

这道题的解法很多,母函数,dp,暴力都可以。

假设法....先假设全部买150块的.也就是i,然后看看剩下多少个50块,也就是j

比如200块,i=1,j=1;
如果250块,i=1,j=2;
i = k / 100 //所有的钱都买150元的能买i个

j = (k / 50) % 3 // 由于三个五十元能买一个150元的物品,j为还剩下多少个50元

if(i > j) cout << k % 50;   // 如果可以买到150元的个数大于剩余50元的个数,则所有的剩余的五十元可以和一个150元结合,买一个200元的物品,k %50必定小于50

else cout << 50 * (j - i) + k % 50;      //没有很多的150元可以和50元结合,就必定剩下几个50元(很少),再加上零头。

显然,一个i价值150块,加上一个j(也就是50块)就可以换一个200块的东西.

那么如果j都能换,就都换了.  也就是i>j的情况(其实等于也可以,等于划分到任务一部分都对);

如果不够换,也就是j>i,
那么把能换的换了,不能换的,只能浪费了..

等式是先分成50的,看看有几份,3份3份的都去掉,看看还剩几个50的剩下

你可能感兴趣的:(1248)