一天做32道
P1004 方格取数(1)
典型的DP问题,寻找上一个状态的最优结果
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,map[11][11],f[11][11][11][11];
int q,w,e;
struct point
{
int x,y,data;
}p[100];
int main()
{
freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);
cin >> n;
while(1)
{
cin >> q >> w >> e;
if(q==0&&w==0&&e==0)break;
p[++m].x = q;
p[m].y = w;
p[m].data = e;
}
for(int i = 1;i <= m;i++)
{
map[p[i].x][p[i].y] = p[i].data;
}
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
for(int k = 1;k <= n;k++)
{
int l = i+j-k;
if(l < 0)break; //这一句是关键!
f[i][j][k][l] = max(max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),f[i][j-1][k-1][l]),f[i][j-1][k][l-1]);
if(i==k&&j==l)f[i][j][k][l]+=map[i][j];
else
{
f[i][j][k][l]+=(map[i][j]+map[k][l]);
}
}
cout << f[n][n][n][n];
}
P1151 子数整数(2)
仔细仔细!!!
#include<iostream>
using namespace std;
int s1,s2,s3;
bool flag = 1;
int main()
{
freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);
int k;cin >> k;
for(int i = 10000;i <= 30000;i++)
{
s1 = i / 100;
s3 = i % 1000;
s2 = (i/10)%1000;
if(s1%k==0&&s2%k==0&&s3%k==0)
{
cout << i <<endl;
flag = 0;
}
}
if(flag)
cout << "NO" ;//实在没想到是因为No打成了NO,太粗心了
}