原创 UVA 1169 Robotruck

dp[i] 表示從原點出發,將前i個垃圾處理的最小距離 dis[i] 表示從原點一直到第i個的總距離   所以  dis[i]-dis[j+1] 表示從第就j+1 到 i 的距離    odis[i] 表示第i個到原點的距離,w[i] 表

原创 hdu 4649 Professor Tian 多校第五場

狀態壓縮——把數據轉換成20位的01來進行運算   因爲只有20位,而且&,|,^都不會進位,那麼一位一位地看,每一位不是0就是1,這樣求出每一位是1的概率,再乘以該位的十進制數,累加,就得到了總體的期望。   對於每一位,狀態轉移方程如

原创 UVA 1424 Salesmen dp入門題

題目大意:給你一個無向聯通圖,在給你一個序列,要求你把它轉換成另一個序列,該序列相鄰兩點的值要麼圖上是聯通的,要麼是相同的,要求修改的點數最小。  設dp[ i ][ j ] 表示從1到第i個位置,以數字 j 爲結尾的最小修改點數,那麼狀

原创 hdu 4647 Another Graph Game 多校第五場

若沒有邊權,則對點權從大到小排序即可。。 考慮邊,將邊權拆成兩半加到它所關聯的兩個點的點權中即可。 因爲當兩個人分別選擇不同的點時,這一權值將互相抵消。 #include <cstdio> #include <cstring> #incl

原创 UVALive 4731 Cellular Network

把n個數分成w組,每個組的值爲這個組加上前面所有組的數字個數之和*這個組的概率之和,要使所有的這些組的和最小。 因爲每個組的概率之和前面要乘係數,而且是越早選越小,那麼我們把所有數字按照從大到小排序,但由於一個組加進去數字如果過多,它

原创 uva 11584 Partitioning by Palindromes dp入門題

dp[i]表示前i個最少構成幾個迴文 所以轉移方程爲    如果(j-i)是一個迴文    則  dp[i]=min(dp[i],dp[j-1]+1)   (j<i) #include <cstdio> #include <cstri

原创 UVA 10817 Headmaster's Headache

狀態壓縮dp,用兩位二進制來表示一門課的信息。 code: #include <iostream> #include <string> #include <cstdio> #include <cstring> #include <al

原创 poj 3809 UVaLive 4643 Twenty Questions

#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <iostream> #include <map> #include <v

原创 hdu 4662 MU Puzzle 多校第六場

所有合法串  以M開始    I+3U  模6  == 4 或 2   MI 例外   #include <stdio.h> #include <string.h> #include <algorithm> using namespace

原创 UVALive 3530 Martian Mining

一個n*m的矩形,每個點有兩種礦,A礦往W方向,B礦往N方向,每個格子上建兩種運送帶,一種方向是w的,一種是n的,要求一個格子最多只能有一種帶,而且傳送帶不能斷,之後能運到邊界纔算有效,而且不能曲折,求收集到的A,B總量最大 設dp[

原创 uva 11552 Fewest Flops

題目大意:給你一個字符串,要你按每組k個按照順序進行分組,每組裏的字母順序任意,然後再按照組的順序拼起來,如果相鄰的幾個相同的字母算一個塊,拼起來後,最少的塊是多少? 所以要最小每組相同字母肯定在一起,所以每組枚舉結尾字母即可,dp[i]

原创 UVALive 3882 And Then There Was One

經典約瑟夫環問題,n個數排成一圈,第一次刪m,以後每k個數刪一次,求最後留下的數。 爲了處理方便,我們約定n個人的編號爲0~n-1,最後答案+1就好,先不考慮m,設f[ n ]爲這n個人最後留下的編號,那麼f[ n ] =( f[ n

原创 UVA 11404 Palindromic Subsequence

逆序後求LCS,然後找出i+j == len情況的最長最小的LCS(子序列在1~i中出現,且其逆序列在i+1到len中出現,對應於迴文串偶數情況), (i+j == len-1情況的最長最小的LCS+str[i+1])(子序列在1~i 中

原创 UVA 11795 Mega Man's Mission

洛克人最初有一把武器,可以殺死某些機器人,每殺死一個機器人,就可以獲得他的武器,每個武器可以殺死某些特定的機器人,計算出殺死這些所有的機器人順序總數?  簡單狀態壓縮DP。dp[ S ] 表示殺死機器人狀態爲S(1表示死,0活着)的總方案

原创 UVA 10564 Paths through the Hourglass

一個由格子組成的沙漏,輸出從上往下的路徑中 和爲s 的方案數,如果路徑數大於0,輸出起點編號最小對路徑中字典序最小對方案。 從底下直接一遍DP上來,中間分成兩段,狀態轉移方程稍微有點不一樣,設d[ i ][ j ][ k ] 表示從