hdu 2546饭卡
用5块钱去买最贵的物品,用剩下的m-5块去买尽量多的物品
1 #include<stdio.h> 2 #include<math.h> 3 #include<vector> 4 #include<stdlib.h> 5 #include<string.h> 6 #include<iterator> 7 #include<iostream> 8 #include<algorithm> 9 #include<set> 10 #include<map> 11 using namespace std; 12 13 int dp[3005],cost[3005]; 14 15 int main() 16 { 17 int n,money,max_cost; 18 while(scanf("%d",&n) && n!=0) 19 { 20 memset(cost,0,sizeof(cost)); 21 memset(dp,0,sizeof(dp)); 22 for(int i=1;i<=n;i++) 23 scanf("%d",&cost[i]); 24 scanf("%d",&money); 25 26 sort(cost+1,cost+n+1); 27 28 max_cost=cost[n]; 29 30 if(money<5) 31 printf("%d\n",money); 32 33 else 34 { 35 for(int i=1;i<n;i++) //----------注意是n-1因为最大的n已经取走 36 for(int j=money-5;j>=cost[i];j--) 37 dp[j]=max(dp[j],dp[j-cost[i]]+cost[i]); 38 39 printf("%d\n",money-max_cost-dp[money-5]); 40 } 41 } 42 return 0; 43 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步