第一题:分情况讨论,如何一台机器做两个面包,遍历ai和bi之和得到答案,如果是两台机器做,通过set来维护所有的bi,遍历机器,遍历到第u台机器就把bi从set里面扔掉,然后取set中的最小值和ai相加即可。第二题:背包问题,首先把所有输入都余上X做预处理,同时输入过程中维护一个总和,这个总和取余之后可得最坏解法。二维dp,第一维i的意思是考虑前i个输入,第二维j的意思为在考虑前i个输入的情况下组合出j需要的最小代价,按状态转移即可。拿到最终的dp数组后,固定一维为n,遍历二维看看和X差多少对答案取其中最小即可。补充转移方程for(int i=1;i<n+1;i++){ for(int j=0;j<X;j++) { dp[i][j]=min(dp[i][j],dp[i-1][j]+1)//对应删除第i的情况 int tmp=(j-mem[i]+X)%X; dp[i][j]=min(dp[i][j],dp[i-1][tmp])//对应采用第i个的情况 }}