A
别人家的博客
别人家的博客
题意: m个不重叠的区间的 最大值
dp[i][j]表示 在确保 第j 个数在的情况下分成 i 组的情况, 所以存在两种情况,第j个数与前
dp[i][j-1]一起 或者 dp[i-1][k] 一起单独成区间
dp[i][j]=max(dp[i][j-1]+max(dp[i-1][k]))+a[j]
k的取值为 (i-1)~j
而max(dp[i-1][k]) 表示上一次求得的值 ,而dp只与上一次 有关,并记录上一次的最大值即可
#include
using namespace std;
typedef long long ll;
#define maxn 1000003
ll dp[maxn][2];
ll sum[maxn];
int main()
{
ll m,n;
ll t;
while(cin>>m>>n)
{
sum[0]=0;
dp[0][0]=0;
dp[0][1]=0;
for(int i=1;i<=n;i++)
{
cin>>t;
sum[i]=sum[i-1]+t;
dp[i][0]=0;
dp[i][1]=0;
}
ll ans=0;
for(int i=1;i<=m;i++)
{
ans=-327670000005;
for(int j=i;j<=n;j++)
{
// cout<
B hdu 1029
题意:输出 超过 一半的数 是什么?
水题吧
#include
using namespace std;
typedef long long ll;
mapmapp;
int main()
{
int n;
ll t;
while(scanf("%d",&n)!=EOF)
{
ll ui=0;
mapp.clear();
for(int i=0;i
C hdu 1069
#include
using namespace std;
typedef long long ll;
struct Node{
int x;
int y;
int z;
};
Node node[200];
int height[200];
bool cmp(Node a,Node b)
{
if(a.x==b.x)
{
if(b.y==a.y)
{
return a.z>b.z;
}
return a.y>b.y;
}
return a.x>b.x;
}
int main()
{
int n;
int x,y,z;
int t=1;
while(scanf("%d",&n)!=EOF&&n)
{
memset(height,0,sizeof(height));
for(int i=0;i>x>>y>>z;
node[i*6].x=x;
node[i*6].y=y;
node[i*6].z=z;
node[i*6+1].x=x;
node[i*6+1].y=z;
node[i*6+1].z=y;
node[i*6+2].x=y;
node[i*6+2].y=x;
node[i*6+2].z=z;
node[i*6+3].x=y;
node[i*6+3].y=z;
node[i*6+3].z=x;
node[i*6+4].x=z;
node[i*6+4].y=y;
node[i*6+4].z=x;
node[i*6+5].x=z;
node[i*6+5].y=x;
node[i*6+5].z=y;
}
sort(node,node+6*n,cmp);
height[0]=node[0].z;
int ans=height[0];
for(int i=0;inode[j].x&&node[i].y>node[j].y)
{
if(height[j]
G hdu1176
#include
using namespace std;
typedef long long ll;
#define maxn 5000003
int mapp[13][100002];
bool vis[13][100002];
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int t;
int a,b;
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
memset(mapp,0,sizeof((mapp)));
memset(vis,0,sizeof(vis));
t=0;
for(int i=0;i1&&vis[j-1][i-1])
{
temp=max(temp,(mapp[j-1][i-1]+mapp[j][i]));
vis[j][i]=1;
}
if(j<11&&vis[j+1][i-1])
{
temp=max((mapp[j+1][i-1]+mapp[j][i]),temp);
vis[j][i]=1;
}
if(vis[j][i])
{
mapp[j][i]=temp;
ans=max(mapp[j][i],ans);
}
}
}
printf("%d\n",ans);
}
return 0;
}
F hdu 1260
#include
using namespace std;
#define maxn 101
int n1[2001];
int n2[2001];
int dp[2001][2];
int main()
{
// freopen("input.txt","r",stdin);
int n;
int t;
cin>>t;
int a,b;
while(t--)
{
cin>>n;
for(int i=0;i>n1[i+1];
}
for(int i=0;i>n2[i+1];
}
for(int j=0;j<=2000;j++)
{
dp[j][0]=25000;
dp[j][1]=25000;
}
dp[1][0]=n1[1];
dp[0][0]=0;
dp[0][1]=0;
for(int i=2;i<=n;i++)
{
dp[i][0]=min(dp[i-1][0],dp[i-1][1])+n1[i];
dp[i][1]=min(dp[i-2][0],dp[i-2][1])+n2[i-1];
}
int ans=min(dp[n][0],dp[n][1]);
//cout<=12)
{
f=1;
}
if(f==0)
{
printf("%02d:%02d:%02d am\n",h,fen,seco);
}
else
{
printf("%02d:%02d:%02d pm\n",h,fen,seco);
}
}
return 0;
}
I hdu1257
贪心?
#include
using namespace std;
#define maxn 101
int n1[2001];
vectorv;
int main()
{
//freopen("input.txt","r",stdin);
int n;
int t;
int a,b;
int ans=0;
while(cin>>n)
{
v.clear();
ans=0;
for(int i=1;i<=n;i++)
{
cin>>n1[i];
}
for(int i=1;i<=n;i++)
{
int f=0;
sort(v.begin(),v.end());
for(int j=0;j=n1[i])
{
f=1;
v[j]=n1[i];
break;
}
}
if(f==0)
{
// cout<
J hdu1160
#include
using namespace std;
#define maxn 101
int n1[2001];
vectorv;
struct Node{
int w;
int s;
int id;}node[1001];
int c[1001];
int dp[1001];
bool cmp(Node a,Node b)
{
if(a.w==b.w)
{
return a.s>b.s;
}
return a.w>node[n].w>>node[n].s)
{
node[n++].id=n;
}
sort(node,node+n,cmp);
int temp=1;
int f=1;
dp[0]=1;
int mf=0;
for(int i=1;inode[i].s)
{
if(temp
L poj 1458
最长公共子序列
#include
#include
#include
using namespace std;
#define maxn 201
int ma[1000][1000];
int main()
{
//freopen("input.txt","r",stdin);
int cn=0;
string s1,s2;
while(cin>>s1>>s2)
{
memset(ma,0,sizeof(ma));
for(int i=0;i
N poj 2533
最长公共子序列长度
#include
#include
#include
using namespace std;
#define maxn 201
int ma[1000];
int dp[1000];
int main()
{
//freopen("input.txt","r",stdin);
int n=0;
string s1,s2;
while(cin>>n)
{
int ans=1;
for(int i=0;i>ma[i];
}
for(int i=0;ima[j])
{
if(dp[i]