您当前的位置: 首页 > 

钟钟终

暂无认证

  • 4浏览

    0关注

    233博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

9/30-10/1

钟钟终 发布时间:2022-10-01 21:52:46 ,浏览量:4

接下来的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            
关注
打赏
1664378814
查看更多评论
0.0382s