前天次才做过一个是三角形的,就是求一个路径然后最值。 这样很明显需要倒着推过去, 用一个dp即可;然而这次想着偷个懒,就直接设置了Max, 类贪心的解决,结果样例是过去了好多个,但就是wa ,后来还是老老实实的写起了 dp , AC
AC代码:
/*
Accepted 2827 C++ 0.8K 0'00.00" 1360K
*/
#include <iostream>
#include <string.h>
using namespace std;
int N,t[50][50];
char m[50][5],c;
int main()
{
while(cin>>N)
{
memset(t,sizeof(t),0);
for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
{
cin>>m[i];
c=m[i][0];
if(c=='T')t[i][j]=10;
else if(c=='J') t[i][j]=11;
else if(c=='Q') t[i][j]=12;
else if(c=='K') t[i][j]=13;
else if(c=='A') t[i][j]=1;
else t[i][j]=c-'0';
}
}
for(int i=1;i<=N;i++)
for(int j=N;j>=1;j--)
t[i][j]=max(t[i][j+1],t[i-1][j])+t[i][j];
cout<<t[N][1]<<endl;
}
}
/*
Wrong Answer 2827 C++ 1.0K 0'00.00" 1352K
*/
#include <iostream>
using namespace std;
int N,t[50][50],ma,x,y;
char m[50][2],c;
int main()
{
while(cin>>N)
{
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
{
cin>>m[i];
c=m[i][0];
if(c=='T')t[i][j]=10;
else if(c=='J') t[i][j]=11;
else if(c=='Q') t[i][j]=12;
else if(c=='K') t[i][j]=13;
else if(c=='A') t[i][j]=1;
else t[i][j]=c-'0';
}
}
x=0; y=N-1;
ma=t[x][y];
while(1)
{
if(x==N-1&&y==0) break;
if(x+1<N)
{
if(y-1>=0)
{
if(t[x+1][y]>t[x][y-1]) {
ma+=t[x+1][y];x++;
}
else {
ma+= t[x][y-1]; y--;
}
}
else {
ma+=t[x+1][y];x++;
}
}
else{
ma+=t[x][y-1];y--;
}
}
cout<<ma<<endl;
}
}