http://acm.hdu.edu.cn/showproblem.php?pid=3374原來這個東西叫最小表示。。。方法:分別求一次最小表示和最大表示求出首字母位置,然後下面就比較暴力,用兩次kmp求出最大串和最小串出現的次數#define N 1000010char str[N],ss[N*2],lin[N];int p[N];int Minrp(char *s, int l){//最小表示 int i = 0, j = 1, k = 0, t; while(i < l
int dp[11][10010];struct node{ int w[101],val[101]; int cnt;}p[11];int main(){ int n,m,k; while(scanf("%d%d%d",&n,&m,&k) != -1){//總共數量,手上金錢,鞋子種類 int i,j; for(i=1;i<=k;i++)p[i].cnt=0; while(n--){
#define N 101int dp[101][101];//殺i只怪忍耐度為j的最大經驗int a[101],b[101];int main(){ int n,m,k,s; while(scanf("%d%d%d%d",&n,&m,&k,&s) != -1){//還需的經驗值,保留的忍耐度,怪的種數,最多的殺怪數 int i,j; for(i=0;i<k;i++){ scanf("%d%d",
題目有點囉嗦,說白了給出一個上限s,n套郵票,每套有m張面值為ai的郵票,問不超過上限的前提下能組成最大的連續面值和(從1開始)。dp[N]:組成面值為i的最小郵票數量+完全背包,更新幾個記錄值#define N 1100int dp[N];//組成面值為i的最小數量int a[12][12];int main(){ int s; while(scanf("%d",&s) && s){ int i,j,k; int n;
http://acm.hdu.edu.cn/showproblem.php?pid=3367根據題目的定義,偽森林就是一個子圖最多隻有一個環,題目問權值最大的偽森林。方法:把Krusual變形,記錄以i為根的樹是否已經有環,再分情況把樹接上#define N 10005#define M 100005int n,m;struct node{ int u,v; int w;}e[M];bool cmp(node a,node b){ return a.w>b.w;}int
參考了該blog的思路http://www.cppblog.com/Yuan/archive/2010/07/11/120101.html,orz...........#define N 100010struct edge{ int v; int len; int next;}e[2*N];int ecnt;int head[N];bool vis[N];int n;int R[N];int p[N*2];int dep[2*N];int dp[20][2*N];int