hdu-acm新生赛-智能车
前言
考场上想了半天,用了好多种思路,最后用背包类一维数组加上最大的最小值记忆化求解。
思路
我一开始想的思路,就不说了,直接说我最终解法是怎么得到的。
我想什么时候无法启动智能车,即判断存不存在电池的组合使得刚好达到所需电力?
我的脑海里冒出了暴力搜索,但是显然这种方法不可能。
记忆化搜索?我又试了试,果不其然,超时了。
根据我以往的经验来看,dp比搜索更高效
于是我开始构建dp数组-->轻松完成
如何找出这种搭配方法的最小的电池容量呢?
除去目标值不去计算最小值之外,其余电力计算达到这种搭配的最小值(好难讲)
代码
#include<iostream>
#include<algorithm>
using namespace std;
int a[50005]={0};
int main()
{
int t;
cin>>t;
while(t--)
{
int n,c;
cin>>n>>c;
int dp[505]={1};
int ans=505;
int mins[505]={0};
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
for(int j=c;j>=a[i];j--)
{
if(dp[j-a[i]])
{
if(j==c)
{
ans=min(ans,a[i]-mins[j-a[i]]);
continue;
}
if(j==a[i])mins[j]=a[i];
else
{
if(mins[j])mins[j]=max(mins[j],mins[j-a[i]]);
else mins[j]=mins[j-a[i]];
}
dp[j]=dp[j-a[i]];
}
}
}
if(ans!=505) cout<<ans<<endl;
else puts("-1");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~