本質上就是乙個在一行中頭尾取數情況下求出分數最大值。設d【i,j】表示該行從i到j的合併分數
則d[i,j]=2*max;
由於時間比較晚了,可能不夠時間寫高精度,先存普通版本演算法
#include#include#include#define maxn 100
int map[maxn][maxn];
int d[maxn][maxn];
int main(void) }
for(a=1;a<=n;a++)
for(i=m-1;i>=1;i--)
}r+=d[1][m];
} printf("%d\n",r);
return 0;
}
50分**
#include#include#include#define maxn 100
#define max 100
typedef struct
bigint;
bigint change(char ch)
return a;
}bigint addtion(bigint a,bigint b)
c.len=i-1;
if(c.n[c.len+1]!=0)
c.len++;
return c;
}bigint plus(bigint a,int b)
c.n[i+1]+=(a.n[i]*b)/10;
} c.len=a.len;
if(c.n[c.len+1]!=0)
c.len++;
return c;
}void print(bigint a)
printf("\n");
}int compare(bigint a,bigint b)
else
d[i][j]=y;
}} r=addtion(r,d[1][m]);
} print(r);
return 0;
}
c++100**
#include#include#includeusing namespace std;
const int maxdigit=30+10;
struct bign
}f[80+10][80+10],_pow[80+10],ans;
bign two=(bign)};
bign operator + (bign a,bign b)
if(c.num[c.dig+1]>0)
c.dig++;
return c;
} bign operator * (bign a,bign b)
if(c.num[c.dig+1]>0)
c.dig++;
return c;
} bign operator * (bign a,int b)
return c;
} bign _max(bign a,bign b)
for(int i=ans.dig;i>=1;i--)
printf("%d",ans.num[i]);
printf("\n");
return 0;
}
wikioi 1166 矩陣取數遊戲
問題描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m 的矩陣,矩陣中的每個元素aij均 為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的得分之和,...
矩陣取數遊戲 Codevs 1166
題目位址 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的 n m 的矩陣,矩陣中的每個元素 ai j 均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共 n 個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的...
1166 矩陣取數遊戲 區間dp 高精度
2007年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 問題描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m 的矩陣,矩陣中的每個元素aij均 為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元...