接下来的2个月的方向: 1.每周两场的ICPC区域赛vp,赛后补题,看情况尽量补 2.洛谷上近几年来的省选题,从绿到蓝到紫,一路刷上去 3.多思考,不追求题目的数量,质量才是关键。 4.触类旁通,碰到一个题不会做,一定要去搜寻多个同类型的题目。 5.手速不是拿牌的关键。 6.剩下的就是努力,抓紧时间,有耐力得走完这两个月。
I Steadily Growing Steam参考了大佬的博客。 感觉这个状态的设计很常规,但为什么自己就像不到呢。 在题意上需要注意一个点: 在玩游戏之前,选出一个序列,数量不大于k,将他们t[i]变成之前的2倍,要求在玩游戏的多次回合中两堆牌点数相同,要求价值最大。
做的时候看出是个背包,配合队友应该能写出来的。 分析: 滚动数组的使用。只涉及前一个状态,可借用&判别奇偶,利用^取上一个状态。 前i张牌 最多使用j次技能 两个牌堆差值为k时获得的最大价值是多少 不选这张牌 f[i][j][k]=f[i-1][j][k]
选入放入a堆 f[x][j][k]=max(f[x][j][k],f[x^1][j][k+t[i]]+v[i])
选入放入b堆 f[x][j][k]=max(f[x][j][k],f[x^1][j][k-t[i]]+v[i])
选入加倍后放入a堆 : f[x][j][k]=max(f[x][j][k],f[x^1][j-1][k+2*t[i]]+v[i])
选入加背后放入b堆 : f[x][j][k]=max(f[x][j][k],f[x^1][j-1][k-2*t[i]]+v[i])
#include
#define int long long
#define endl '\n'
#define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
using namespace std;
const int inf=1e18;
const int N=7e5+5;
int n,m,f[2][105][5205],v[105],t[105];
//前i张牌 最多使用j次技能 两个牌堆差值为k时获得的最大价值是多少
//不选这张牌 f[i][j][k]=f[i-1][j][k]
//选入放入a堆 f[i][j][k]=f[i][j][k+a[i]]+v[i]
//选入放入b堆 f[i][j][k]=f[i][j][k-a[i]]+v[i]
void solve()
{
cin>>n>>m;
for(int i=1;i>v[i]>>t[i];
for(int i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?