這一題考察的是完全狀態的獲取能力:--->好題,回頭一定要再複習一遍.主要是複習思想.
dp狀態的獲得是由小狀態通過找出後效型的問題關鍵然後再一步一步增加限制的.所以一開始的dp[i]很重要.往往先不出來的時候可以開綠一下是不是dp[i]的狀態是否正確.注意細節-----c(n , 2) ;
#include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
#define mem0(x , y) memset(x , y , sizeof(x))
#define ll long long
#define rep(x , y) for(int x=0;x=0;x--)
#define lowbit(x) (x & (-x))
#define read(x) scanf("%d",&x)
#define print(x) printf("%d\n" , x) ;
#define middle int mid = (l + r)/2
#define lson rt<<1 , l , mid
#define rson rt<<1|1 , mid+1, r
#define case int t ; int ca = 0 ; read(t) ; while(t--)
#define rt tree[rt]
#define fp freopen("1" , "r" , stdin)
#define mem0(x , y) memset(x , y , sizeof(x))
#define bin(x) ll bin ; bin = (ll)1 << x ; ///2的x次方
#define e edge[i]
const int maxn = 500000 ;
const int maxv = 200000 ;
const int maxe = 200000 ;
const int mod = 1e8+7 ;
using namespace std ;
/****************前向星****************
struct edge
}edge[maxe] ;
int head[maxv] , hct = 0 ;
void add_edge(int s,int e,int w)
/*************************************/
#define mod dp[i][j][k] %= mod
#define dp dp[i][j][k]
ll dp[210][210][210] ;
ll ans = 0 ;
map maps ;
int main()
}return 0 ;
int n ; read(n) ;
dp[0][0][0] = 1 ;
for(int i=1;i<=n;i++)}}
}cout << ans << endl ;
}
51nod1183 編輯距離 動態規劃
編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sit...
括號著色,51nod1758,動態規劃
portal 這題區間dp還是很明顯的,考慮對於乙個括號序列,要麼把它拆成很多個括號序列,要麼去掉兩端的括號,合併的時候記錄下兩端的顏色即可。轉移明顯。include include include includeusing namespace std const int n 710 long lo...
51nod 1020 逆序排列 動態規劃
分析 記dp n k 為n個數,逆序數為k的個數,將dp n k 分為兩部分,一部分有1 n 1的逆序構成,一類是有n的逆序,可以得到dp n 1 k 1 max 0,k 1 n min k 1,n n 1 2 dp n i 再用dp n 1 k 1 與dp n 1 k 做差,討論一下k和n的關係就...