HDU 2546 饭卡 (01背包)
分析:为了得到最优解,从m中取出5来买最贵的。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> #include <cstdlib> #include <map> using namespace std; int a[1005]; int dp[1005]; const int oo = 1e9+7; int main() { int n, m; while(scanf("%d", &n), n) { for(int i=1; i<=n; i++) { scanf("%d", &a[i]); } scanf("%d", &m); sort(a+1, a+n+1); memset(dp, 0, sizeof(dp)); if(m<5) { printf("%d\n", m); continue; } int mm = m-5; for(int i=1; i<n; i++) { for(int j=mm; j>=a[i]; j--) { dp[j] = max(dp[j], dp[j-a[i]]+a[i]); } } printf("%d\n", m-a[n]-dp[m-5]); } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步