1.
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int n;
int a[10];
int b[10];
int dp[100];
int main() {
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%d",&a[i]);
b[i] = a[i];
}
sort(b,b+n);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(j)
dp[j] = min(dp[j-1],dp[j]+abs(b[j]-a[i]));
else{
dp[j] = abs(b[j]-a[i]);
}
}
}
printf("%d",dp[n-1]);
return 0;
}
2.
#include<stdio.h>
#include<string.h>
int main() {
int n;
int res = 0;
scanf("%d",&n);
for(int i=0;i*3<=n;i++) {
for(int j=0;j*2<=n-i*3;j++) {
res++;
}
}
printf("%d",res);
return 0;
}
5. 我感觉第二个例子错了.... 如果我理解错了,有大佬可以提点一下么....
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int in[30005];
bool a[30005][30005];
int n,m;
void topsort(int n) {
priority_queue<int,vector<int>,greater<int> > pq;
for(int i=1;i<=n;i++) {
if(in[i]==0) {
pq.push(i);
}
}
while(!pq.empty()) {
int t = pq.top();
printf("%d ",t);
pq.pop();
for(int i=1;i<=n;i++) {
if(a[t][i]==true && --in[i]==0){
pq.push(i);
}
}
}
}
int main() {
memset(in,0,sizeof(in));
scanf("%d %d",&n,&m);
while(m--){
int j,k;
scanf("%d %d",&j,&k);
if(a[j][k]==false) {
a[j][k] = true;
in[k]++;
}
}
topsort(n);
}
6.
#include<stdio.h>
#include<string.h>
long long dp[1000];
long long nj(int n) {
long long sum = 1;
while(n) {
sum = sum*n;
n--;
}
return sum;
}
long long nc(int n) {
memset(dp,0,sizeof(dp));
dp[1] = 0;
dp[2] = 1;
for(int i=3;i<=n;i++) {
dp[i] = (i-1)*(dp[i-1]+dp[i-2]);
}
return dp[n];
}
int n;
int main() {
scanf("%d",&n);
printf("%.2f%%",nc(n)*1.0/nj(n)*100);
return 0;
}
3.4 做不来....