bzoj1563(dp,四邊形不等式優化)
Description
Input
Output
對於每組資料,若最小的不協排程不超過1018,則第一行一個數表示不協排程若最小的不協排程超過1018,則輸出”Too hard to arrange”(不包含引號)。每個輸出後面加”——————–”
Sample Input
4
4 9 3
brysj,
hhrhl.
yqqlm,
gsycl.
4 9 2
brysj,
hhrhl.
yqqlm,
gsycl.
1 1005 6
poet
1 1004 6
poet
Sample Output
108
32
Too hard to arrange
10000000000000000000
【樣例說明】
前兩組輸入資料中每行的實際長度均為6,後兩組輸入資料每行的實際長度均為4。一個排版方案中每行相鄰兩個句子之間的空格也算在這行的長度中(可參見樣例中第二組資料)。每行末尾沒有空格。
HINT
總共10個測試點,資料範圍滿足:
測試點 T N L P
1 ≤10 ≤18 ≤100 ≤5
2 ≤10 ≤2000 ≤60000 ≤10
3 ≤10 ≤2000 ≤60000 ≤10
4 ≤5 ≤100000 ≤200 ≤10
5 ≤5 ≤100000 ≤200 ≤10
6 ≤5 ≤100000 ≤3000000 2
7 ≤5 ≤100000 ≤3000000 2
8 ≤5 ≤100000 ≤3000000 ≤10
9 ≤5 ≤100000 ≤3000000 ≤10
10 ≤5 ≤100000 ≤3000000 ≤10
所有測試點中均滿足句子長度不超過30。
Source
四邊形不等式優化dp
算是板子了吧。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define repp(i,j,k) for(int i = j;i >= k;--i)
#define rept(i,x) for(int i = linkk[x];i;i = e[i].n)
#define P pair<int,int>
#define Pil pair<int,ll>
#define Pli pair<ll,int>
#define Pll pair<ll,ll>
#define pb push_back
#define pc putchar
#define mp make_pair
#define file(k) memset(k,0,sizeof(k))
#define ll long double
const long long INF = 1e18;
int read()
{
int sum = 0;char c = getchar();bool flag = true;
while(c < '0' || c > '9') {if(c == '-') flag = false;c = getchar();}
while(c >= '0' && c <= '9') sum = sum * 10 + c - 48,c = getchar();
if(flag) return sum;
else return -sum;
}
struct node{
int j,l,r;
};
int n , l , p;
ll len[101000];
ll sum[101000] , f[101000];
char s[31];
int last;
ll Pow(ll a)
{
ll now = 1;
int tmp = p;
while(tmp)
{
if(tmp & 1) now *= a;
a = a * a;
tmp >>= 1;
}
return now;
}
ll V(int a,int b)
{
ll ans = 0;
ans = sum[b] - sum[a] + b - a - 1;
ans = fabs(ans - l);
ans = Pow(ans);
return ans;
}
void work()
{
int k = 0;
rep(i,1,n)
{
while(k < i-1 && f[k] + V(k,i) > f[k+1] + V(k+1,i))k++;
f[i] = f[k] + V(k,i);
}
}
void init()
{
n = read();l = read();p = read();
rep(i,1,n) scanf("%s",s+1),len[i] = strlen(s+1),sum[i] = sum[i-1] + len[i];
work();
if(f[n] > INF) printf("Too hard to arrange\n");
else printf("%lld\n",(long long)f[n]);
printf("--------------------\n");
}
int main()
{
freopen("8.in","r",stdin);
int T = read();
while(T--) init();
return 0;
}
相關推薦
bzoj1563(dp,四邊形不等式優化)
Description Input Output 對於每組資料,若最小的不協排程不超過1018,則第一行一個數表示不協排程若最小的不協排程超過1018,則輸出”Too hard to arrange”(不包含引號)。每個輸
石子歸併(區間dp & 四邊形不等式優化)
基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級演算法題 收藏 取消關注 N堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能
學習筆記第十七節:斜率優化Dp,四邊形不等式證明決策單調
正題 我就以這一題:玩具裝箱裝玩具來引入我們今天的話題。 我們先設f[i]表示前i個玩具裝的最小費用是多少。 那麼,很明顯就有我們列舉一個j,使得j+1到i裝
[HDOJ3998] Sequence(DP,最大流)
好的 hdoj 一個點 include type div c++ cnblogs span 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3998 給數字,問LIS以及每一個數字只取一次,最多能取多少個LIS。 LIS直接O(
Bzoj-2431 逆序對數列(DP+前綴和優化)
string 開始 div include main () 生成 enter while 這道題的dp式子很好推 dp[i][j]表示1~n的排列中生成的逆序對數為k的序列的個數 則有dp[i][j]=∑dp[i-1][0~j-1](j<=k) 這個式子
【轉】斜率優化DP和四邊形不等式優化DP整理
dex add ive mat 整理 off code 斜率dp 好的 當dp的狀態轉移方程dp[i]的狀態i需要從前面(0~i-1)個狀態找出最優子決策做轉移時 我們常常需要雙重循環 (一重循環跑狀態 i,一重循環跑 i 的所有子狀態)這樣的時間復雜度是O(N^2)而 斜
HUD 6447 YJJ's Salesman (dp + 樹狀陣列優化)
題意 給你一張 109∗109 10 9 ∗ 10
【qduoj - 夏季學期創新題】C語言課程設計-階梯問題(dp,高精度大數)
題幹: 描述 N級階梯,人可以一步走一級,也可以一步走兩級,求人從階梯底端走到頂端可以有多少種不同的走法。 輸入 一個整數n,代表臺階的階數。 輸出 求人從階梯底端走到頂端可以有多少種不同的走法,輸出結果的格式為大整數
區間dp 與 四邊形不等式優化 學習筆記
部落格目錄 很久之前在網上看了傳說中的四邊形不等式,然後現在發現忘光了。趁比賽前夕趕快拿來熟悉一下。 一、引入 形如: dp[i][j]=min{dp[i][k]+dp[k+1][j]+cost[i][j]} 的狀態轉移方程,如果不加優化的話ijk三層迴圈O(n
【總結】從詩人小G談DP的四邊形不等式優化
四邊形不等式 設w(x,y)w(x,y)w(x,y)是定義在整數集合上的二元函式。若對於定義域上的任何整數,a,b,c,d(a≤b≤c≤d)a,b,c,d(a\leq b\leq c\leq d)a
[NOI2009]詩人小G(dp + 決策單調性優化)
題意 有一個長度為 \(n\) 的序列 \(A\) 和常數 \(L, P\) ,你需要將它分成若干段,每 \(P\) 一段的代價為 \(| \sum ( A_i ) − L|^P\) ,求最小代價的劃分方案。 \(n \le 10^5 , 1 \le P \le 10\) 題解 考慮暴力 \(O(n^2)\)
[dp專題-四邊形不等式優化]51nod 1022
1021石子歸併 V1N堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將N堆石子合併成一堆的最小代價。 例如: 1 2 3 4,有不少合併方法 1 2 3 4 => 3 3 4(3)
斜率優化DP和四邊形不等式優化DP整理
當dp的狀態轉移方程dp[i]的狀態i需要從前面(0~i-1)個狀態找出最優子決策做轉移時 我們常常需要雙重迴圈 (一重迴圈跑狀態 i,一重迴圈跑 i 的所有子狀態)這樣的時間複雜度是O(N^2)而 斜率優化或者四邊形不等式優化後的DP 可以將時間複雜度縮減到O(N) O(
POJ1160 Post Office (四邊形不等式優化DP)
single inpu cst class pac ios 不等式 lang rep There is a straight highway with villages alongside the highway. The highway is represented as
CodeForces - 321E:Ciel and Gondolas (四邊形不等式優化DP)
題意:N個人排成一行,分成K組,要求每組的不和諧值之和最小。 思路:開始以為是斜率優化DP,但是每個區間的值其實已經知道了,即是沒有和下標有關的未知數了,所以沒必要用斜率。 四邊形優化。 dp[i][j]表示前j個人分為i組的最小代價。 #include<bits/stdc++.h>
HDU 2829 Lawrence(四邊形不等式優化DP)
題意:鐵路上有n個站點,每個站可以往其他站運送糧草,現在要炸掉m段鐵路(兩個站點之間為一段)使得糧草補給之和最小,剩餘每塊連通鐵路的糧草補給Strategic Value計算方法見題目,不再累贅。
BZOJ1563/洛谷P1912 詩人小G 【四邊形不等式優化dp】
set har 方案 zoj #define 證明 isp 現在 fine 題目鏈接 洛谷P1912【原題,需輸出方案】 BZOJ1563【無SPJ,只需輸出結果】 題解 四邊形不等式 什麽是四邊形不等式? 一個定義域在整數上的函數\(val(i,j)\),滿足對\(\fo
四邊形不等式優化講解(詳解)
累加器傳送門: 本篇博文意在詳細講解如下內容 F. 什麼是四邊形不等式 S. 四邊形不等式優化如何證明 T. 怎麼用四邊形不等式優化 (好氣啊,這篇博文我寫了兩遍,第一遍的沒有儲存就關了) (感謝部落格園的Staginn
POJ 1160 Post Office (四邊形不等式優化DP)
open memset cpp 。。 ios ems max while ctype 題意: 給出m個村莊及其距離,給出n個郵局,要求怎麽建n個郵局使代價最小。 析:一般的狀態方程很容易寫出,dp[i][j] = min{dp[i-1][k] + w[k+1][j]},表示
hdu1059(背包dp二進制優化)
real ask include art same star using scribe number Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe