1563: [NOI2009]诗人小G

2024-03-27 04:58
文章标签 诗人 noi2009 1563

本文主要是介绍1563: [NOI2009]诗人小G,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

估计只有我这种蒟蒻才写了颗线段树吧…
容易找到n^2 dp方法:
即f[i] = min(|sum[i] - sum[j] - l + i - j - 1|^p)
然后令k > j且k优于j,简单思考得到…
若k当前已经优于j,那么以后一定会一直优于j
所以该方程满足决策单调…
那么考虑把当前点在哪个位置作为最优点,那么在这个点以后肯定一直是他最优(前提是原本这些位置上更优的点小于当前点)
所以二分判断即可…
c++代码如下:

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)
#define repd(i,x,y) for(register int i = x ; i >= y; -- i)
typedef long double ll;
using namespace std;
template<typename T>inline void read(T&x)
{x = 0;char c;int sign = 1;do { c = getchar(); if(c == '-') sign = -1; }while(!isdigit(c));do { x = x * 10 + c - '0'; c = getchar(); }while(isdigit(c));x *= sign;
}const int N = 1e5+500; const ll inf = 1e18;
int n,l,p,a[N],sum[N],fa[N];
char s[31];
long double f[N];struct segment_tree
{int sign[N << 3];inline void pre() { memset(sign,0,sizeof sign); }void put_down(int id){if(!sign[id]) return ;sign[id << 1] = sign[id];sign[id << 1 | 1] = sign[id];}int find(int id,int l,int r,int x){put_down(id);if(sign[id] || l == r) return sign[id];int mid = l + r >> 1;if(x <= mid) return find(id<<1,l,mid,x);else return find(id<<1|1,mid+1,r,x);}void modify(int id,int l,int r,int L,int R,int w){put_down(id); sign[id] = 0;if(l == L && R == r) return void(sign[id] = w);int mid = l + r >> 1;if(R <= mid) modify(id<<1,l,mid,L,R,w);if(L > mid) modify(id<<1|1,mid+1,r,L,R,w);else modify(id<<1,l,mid,L,mid,w),modify(id<<1|1,mid+1,r,mid+1,R,w);}
}seg;inline ll quick_pow(ll x,int y)
{ll ans = 1;while(y){if(y&1) ans = x * ans;x = x * x;y >>= 1;}return ans;
}inline ll get(int x,int z) { return f[x] + quick_pow(abs(sum[z] - sum[x] + z - x - 1 - l),p); }inline bool check(int x,int y) { return get(seg.find(1,1,n,x),x) > get(y,x) ; }inline void solve()
{seg.pre();read(n); read(l); read(p);rep(i,1,n){scanf("%s",s + 1);a[i] = strlen(s + 1);sum[i] = sum[i - 1] + a[i];fa[i] = i - 1;}rep(i,1,n){f[i] = get(seg.find(1,1,n,i),i);int l = i + 1 ,r = n,mid,ans = -1;while(l <= r){if(check(mid = l + r >> 1,i)) r = mid - 1,ans = mid;else l = mid + 1;}if(~ans) seg.modify(1,1,n,ans,n,i);}if(f[n] > inf) puts("Too hard to arrange");else printf("%lld\n",(long long)f[n]);puts("--------------------");
}int main()
{int t;read(t);while(t -- ) solve();return 0;
}

这篇关于1563: [NOI2009]诗人小G的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851003

相关文章

hdu-2095-find your present (2)//1563-find your present

#include<stdio.h> int main() {     int n,i,t,m;     while(scanf("%d",&n)&&n)     {         scanf("%d",&t);         for(m=t,i=1;i<n;i++)         {             scanf("%d",&t);

UVA 1563 - SETI (高斯消元+逆元)

UVA 1563 - SETI 题目链接 题意:根据题目那个式子,构造一个序列,能生成相应字符串 思路:根据式子能构造出n个方程,一共解n个未知量,利用高斯消元去解,中间过程有取摸过程,所以遇到除法的时候要使用逆元去搞 代码: #include <cstdio>#include <cstring>#include <algorithm>using namespace

题目 1563: 蓝桥杯-质因数

题目描述: 将一个正整数N(1< N< 32768)分解质因数。例如,输入90,打印出90=2*3*3*5。 代码: package lanqiao;import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n =

大唐300年,45位诗人的出场顺序

唐朝,可以说是大唐王朝,开创盛世。“九天阊阖开宫殿,万国衣冠拜冕旒”!何等气势恢宏,壮观绚丽。 公元618年,唐朝开国皇帝唐高祖李渊,在长安称帝。开启了大唐王朝。 1骆宾王 公元618年,大唐第一位诗人出生。他就是骆宾王,一个小神童大唐。七岁写了一首《咏鹅》。 鹅鹅鹅, 曲项向天歌, 白毛浮绿水, 红掌拨清波。 此诗一出,立马妇孺皆知。一时传唱经久流传。 2卢照邻 公元63

【动态规划】【C++算法】1563 石子游戏 V

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 LeetCoce:1563 石子游戏 V 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。 游戏中的每一轮:Alice 会将这行石子分成两个 非空行(即,左侧行和右侧行);Bob 负责计算每一行的值,即此行中所有石子的值

成熟男人的修炼-国王、祭祀、诗人、武士

身为男人,恐怕你不想成为女人眼中“浅薄”乃至“猥琐”的代表。面对爱情,你不想成为女人时常提起的某个‘不太一样的’男人吗?你不想每次她提起你的时候,你看到的是她眼里无比的尊敬和臣服?对工作,你不想独挡一面,意气风发吗?会有人回答不想吗?所以你应该寻找自己的男性身份,激发本能,追求使命,应该让你精神上的“巨婴男孩”死掉,应该去迎接男人的诞生或者回归,应该提高自己的文化修养和内在气质。成熟男人要具备的核

惊爆了!这款AR智能教育APP可以“面对面”与3D虚拟诗人互动对诗

“大鹏一日同风起,扶摇直上九万里” “莫愁前路无知己,天下谁人不识君” “古来圣贤皆寂寞,惟有饮者留其名” ...... 图源《长安三万里》 唐朝只是一个时代的缩影,是千年中华文化长卷中的一小部分。 在浩瀚如烟的文学典籍里,诗词是最具时代代表性的璀璨明珠,古人以诗词歌赋来寄托情怀,今人以更加多元的科技文明方式——AR智能教育APP来吸纳传统文化中的文学瑰宝,这是时代演变的必经之路,

ubuntu GPU环境下使用MindSpore 1.0调试AI诗人的一次无疾而终的尝试

转载地址:https://bbs.huaweicloud.com/forum/thread-83497-1-1.html 作者:longvoyage 电脑硬件配置: 12345处理器 英特尔 Core i5-7200U @ 2.50GHz 双核 主板 联想 LNVNB161216 ( 7th Generation Intel Processor Family I/O - 9D58 笔记本芯片

仿QQ输入法诗人模式格式化字符串

仿QQ输入法-诗人模式-格式化字符串 直接上代码吧,没啥好说的, 关键:如何计算出分成列,每列的高度是多少 package ;import android.content.Context;import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;/*** createTime: 202

靠一首诗流芳后世的26位诗人

中国古代诗词史上的文人墨客众多,著名的诗词大家也不少,尤其是唐宋以来,可谓是人才辈出,从李白、杜甫到苏轼、辛弃疾,从李清照、朱淑贞到纳兰性德等。 当然,在浩瀚的诗词史上,哪个文人不想名传千古,流芳后世?但不可能每个诗人都能成为“李杜”,每个词人都能成为“苏辛”的。 但这其中也不乏有像崔护、崔颢、崔郊这样的诗词文人的存在,可谓是因一首诗或词名垂青史,也有像张若虚这样的诗人,历尽千年才被世人重视,