首页 > 其他分享 >从一道很水的题窥探动态规划优化技巧

从一道很水的题窥探动态规划优化技巧

时间:2024-11-14 20:40:19浏览次数:1  
标签:技巧 int tw 很水 窥探 1e5 优化 dp

原题:https://www.luogu.com.cn/problem/P1776

这题虽然标绿,但是数据极水,通过解绑优化即可卡着1s时限通过
未优化代码:

const int N=1e5+5;
int v[N],w[N],m[N];
int dp[N];
void solve(){
    int n,W;cin>>n>>W;

    for(int i=1;i<=n;i++){
        cin>>v[i]>>w[i]>>m[i];
    }

    for(int i=1;i<=n;i++){
        for(int j=W;j>=w[i];j--){
            for(int k=1;k<=m[i] and k*w[i]<=j;k++){
                dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
            }
        }
    }

    cout<<dp[W];
}

优化方法1:二进制拆分

const int N=1e5+5;
int v[N],w[N],m[N];
int tv[N],tw[N];
int dp[N];
void solve(){
    int n,W;cin>>n>>W;

    for(int i=1;i<=n;i++){
        cin>>v[i]>>w[i]>>m[i];
    }
    //二进制拆分
    int idx=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m[i];j<<=1){
            m[i]-=j; //减去已拆分的
            //定义二进制意义下的新物品
            tw[++idx]=j*w[i];
            tv[idx]=j*v[i];
        }
        // 若有余数也要加进来
        if(m[i]){
            tw[++idx]=m[i]*w[i];
            tv[idx]=m[i]*v[i];
        }
    }
    //用新物品进行01背包
    for(int i=1;i<=idx;i++){
        for(int j=W;j>=tw[i];j--){
            dp[j]=max(dp[j],dp[j-tw[i]]+tv[i]);
        }
    }
    cout<<dp[W];
}

标签:技巧,int,tw,很水,窥探,1e5,优化,dp
From: https://www.cnblogs.com/TaopiTTT/p/18546767

相关文章

  • 响应式Web设计:纯HTML和CSS实现技巧
    响应式Web设计是一种确保网页在不同设备和屏幕尺寸下都能良好显示的设计方法。以下是使用纯HTML和CSS实现响应式设计的关键技巧:流式布局(FluidLayouts):使用相对单位(如百分比)而非固定单位(如像素)来定义元素的宽度,使元素能根据容器宽度动态调整。媒体查询(MediaQueries):根据不同......
  • Origin图表技巧之绘制带辅助面的3D折线图
    折线图是科研中经常用到的图表之一,它通过线的升降变化显示数据的变化趋势,今天给大家分享绘制三维折线图的操作方法:操作步骤:1、先打开Origin2024软件,然后在Book1中输入如下示例数据:2、鼠标右击将C(Y)和E(Y)列设置为Z:3、将数据调整为XYZ型数据,如下:4、先选中所有数据:5......
  • 谷歌搜索的隐藏功能:10个超实用技巧,你get了吗?
    1.搜索特定网站site:命令:通过“site:网站域名”限制搜索结果在特定网站内。比如搜索“site:wikipedia.org”展示维基百科上的相关结果。2.文件类型搜索filetype:命令:可以查找特定格式的文件。如“麻婆豆腐食谱filetype:pdf”将展示所有与麻婆豆腐食谱相关的PDF文件。3.......
  • sql优化技巧
    1.避免使用SELECT*,使用具体字段反例:SELECT*FROMemployee;正例:SELECTid,name,ageFROMemployee;使用具体字段可以节省资源、减少网络开销,且能避免回表查询。2.避免在WHERE子句中使用OR反例:SELECT*FROMuserWHEREuserid=1ORage=18;正例:--使用UNION......
  • 鸿蒙NEXT开发实用技巧:通用工具类
    今天分享一个幽蓝君自己在开发中的小技巧,就是封装一个通用工具类,之前大家如果下载过幽蓝君的代码可能也会发现这个东西。比如我们在开发中有一些比较常用的颜色、尺寸或者方法,都可以用一个类封装起来,这样不仅使用方便,统一修改也更加方便。首先,创建一个和pages同级别的文件夹,在文......
  • 鸿蒙开发实战:深度解析网络管理技巧与实战应用
    在鸿蒙项目开发中,网络管理扮演着举足轻重的角色。本文将深入剖析鸿蒙网络管理的核心技术,帮助开发者精准把握网络状态,打造流畅且用户友好的应用体验。在鸿蒙应用中,实时监测网络状态是确保应用稳定性和用户体验的关键。网络状态的变化,如从Wi-Fi切换到移动数据,或从有网络状态变为......
  • 鸿蒙开发实战:智能日志定位与高效调试技巧
    在鸿蒙系统的开发过程中,日志定位是一个关键的调试步骤。想象一下,如果你能够轻松地在繁杂的代码中快速定位到日志产生的位置,那将会极大地提高你的开发效率。今天,我将分享一套代码,它能帮助你实现这一目标。效果展示当你使用这套代码时,日志的打印效果将如下所示:W1234at(ent......
  • “腾讯会议”100人内使用不限时的小技巧
    通过企业微信的方式登录即可。具体步骤如下:第一步:注册企业微信或者加入已有的企业微信组织架构;第二步:进入【腾讯会议】,选择“企业微信”方式登录;第三步:确定当前登录后,此账号可以使用不限时会议的功能。......
  • 快速提升ROI,收藏这份Facebook广告投放技巧!
    Facebook广告在海外数字营销中占据重要地位。据统计,约有700万广告商活跃在该平台上,购买力不容小觑。然而,当前Facebook广告竞争激烈,导致广告位供不应求,成本上升,尤其是在下半年营销旺季中,广告主广告需求明显增加,推高了广告成本。那么如何在有限的预算中跑出理想的ROI,本篇内......
  • 洛谷题单 算法2-2 常见优化技巧
    洛谷题单算法2-2常见优化技巧单调栈单调栈最经典的应用,就是在一个数列里寻找距离元素最近的比其大/小的元素位置。模板题,寻找每个元素右边第一个比它大的元素下标。stack<int>s;for(inti=n;i>=1;i--){while(s.size()&&a[s.top()]<=a[i])s.pop();f[i]=s.......